在prolog中,如何在规则失败后继续?

时间:2014-03-28 15:46:40

标签: prolog

我有[[1,2],[1,3],[1,4],[2,1],[2,2],......等对的列表

function([[H1, H2| _]|Rest]):-
    conflicts(H1,H2),
    write('conflict: '), write(H1), writeln(H2),
    function(Rest).
function([]).

我可以采取" 1"作为H1和" 2"作为H2。

conflict规则根据某些规则进行比较,它可以正常工作。

" 1"和" 2"冲突。所以conflicts返回true并写入"冲突1 2"在第一次迭代。

" 1"和" 3"没有冲突。因此conflicts在第二次迭代时返回false

如您所料,通话以false结束。

我想继续第三次迭代,第四次和第五次......如果第三对冲突,它会写;否则,它将继续而不写。

我该怎么做? 非常感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用Prolog的if-then-else控件构造:

function([[H1, H2| _]|Rest]):-
    (   conflicts(H1,H2) ->
        write('conflict: '), write(H1), writeln(H2)
    ;   true
    ),
    function(Rest).
function([]).

顺便说一句,要表示对,H1-H2(H1, H2)等表示比使用列表更有效,因为[H1, H2]只是'.'(H1, '.'(H2, []))的语法糖。< / p>

相关问题