我正在 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
不断地检查第一个子句的目标。我知道这很愚蠢,但我找不到如何获取可激活任务的列表。更简单的是,如何生成任务列表...?