给定一个排序的,没有重复的列表,LI想知道它是否至少有一对互补整数(即< -1,1>,< -2,2>等)
我很困惑如何在prolog中功能性地构建这个。基本上我想要做的是逐个遍历每个负数,并检查列表中是否存在其补码(正数位)。通常这将是其他语言的双循环,但我怎么能在Prolog中做到这一点?
这是我迄今为止所拥有的内容,但我很好奇是否有更优雅的解决方案而不使用控制声明...
findint(X,[X|_]).
findint(X,[_|Tail]) :- findint(X,Tail).
findpair([X|Tail]) :- X < 0, Y is -1*X, (findint(Y,Tail) -> true ; findpair(Tail)).
答案 0 :(得分:0)
交易技巧&#39;:使用member / 2而不是迭代
complement_integers(L, I1,I2) :-
member(I1,L),
member(I2,L),
I1 =:= -I2.