我有[[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
结束。
我想继续第三次迭代,第四次和第五次......如果第三对冲突,它会写;否则,它将继续而不写。
我该怎么做? 非常感谢。
答案 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>