私はPrologでタスクスケジューラをプログラミングしています。次のように、タスクをアクティブ化可能と見なすことができる時期を定義する一連の述語があります。
task(id01).
task(id02).
task(id03).
task(id04).
activable(X) :-
task(X),
inactive(X),
conditions1(X).
activable(X) :-
task(X),
inactive(X)
conditions2(X).
activable(X) :-
task(X),
inactive(X),
conditions3(X).
いずれかのタスクをアクティブ化する前に、アクティブ化可能なすべてのタスクのリストをどのように生成できるのでしょうか。私はこのようなもので試しました:
handle_activable([A|As]) :-
activable(A),
handle_activable(As).
handle_activable([]).
schedule :-
handle_activable(As),
activate_all(As).
しかし、私が呼び出すときschedule/0
、私は常に最初のタスクをチェックtask(id01)
し、最初のactivable/1
節の目標を常に取得します。ばかげていることは知っていますが、アクティブ化可能なタスクのリストを取得する方法が見つかりません。さらに簡単に、タスクのリストを生成する方法...?