Prolog在列表中找到整数补码

时间:2016-03-06 16:44:36

标签: list prolog

给定一个排序的,没有重复的列表,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)).

1 个答案:

答案 0 :(得分:0)

交易技巧&#39;:使用member / 2而不是迭代

complement_integers(L, I1,I2) :-
    member(I1,L),
    member(I2,L),
    I1 =:= -I2.