我在Prolog中有这个列表,谓词check_lower(N1,N2)确定N1低于N2的数量。现在由于列表按顺序如下所示,我使谓词迭代列表,直到它遇到相同的数字。一旦遇到相同的号码,它就会终止。
我目前遇到的问题是,它找到相同的号码后会回溯,并显示列表的其余部分。有没有办法可以在失败后终止。
numbers([one,two, three, four, five]).
number(X) :- numbers(N), member(X, N).
check_lower(N1,N2) :- number(N1), N1\=N2.
这是我的问题:?- check_lower(N, three).
我跟踪了我的节目无济于事,感谢任何建议。 此外,对不起,如果这篇文章是群集的,这是我第一次在这里发帖。
答案 0 :(得分:1)
我采用了另一种方法。将你的谓词用于排序的数字列表,并在附加的帮助下返回一个较小的“数字”(元素)列表(在列表的前面出现),这可以很容易地适应更大的值。
numbers([one,two, three, four, five]).
check_lower(N1,N2):-
numbers(ALL),
append(N1,[N2|_],ALL).