Prolog返回某些排列

时间:2018-05-21 11:59:00

标签: prolog return permutation

我有一个谓词时间表(A,B,C),它返回列表A,B,C的可能排列并带有回溯

?- schedule(A,B,C).

A = [im204,212,217]
B = [im209,214,218]
C = [im210,216] ? ;

A = [im204,212,218]
B = [im209,214,217]
C = [im210,216] ? ;

A = [im204,212,216]
B = [im209,214,218]
C = [im210,217] ?

我还有谓词schedule_errors(A,B,C,E),它从列表A,B,C到E返回错误(不介意错误是什么)。

?- schedule_errors([im204, im209, im210], [im212, im214, im217], [im216, im218]).
E = 4 ?

在我的新谓语中

schedule_all_errors(A,B,C,E):-
   schedule(A,B,C),
   schedule_errors(A,B,C,E).

它返回可能的排列以及错误号

?- schedule_all_errors(A,B,C,E).

A = [im204,212,217]
B = [im209,214,218]
C = [im210,216]
E = 14 ? ;

A = [im204,212,218]
B = [im209,214,217]
C = [im210,216]
E = 6 ? ;

A = [im204,212,216]
B = [im209,214,218]
C = [im210,217]
E = 12 ?

我想知道是否有办法只返回零错误的排列。 (或不返回任何错误不同于0的排列)

1 个答案:

答案 0 :(得分:2)

最后添加这个条件

schedule_all_errors_1(A,B,C):-
   schedule(A,B,C),
   schedule_errors(A,B,C,E),
   E = 0.

schedule_all_errors_1(A,B,C):-
   schedule(A,B,C),
   schedule_errors(A,B,C,0).

第二个是否有效取决于schedule_errors的定义。