失败后终止查询Prolog

时间:2018-02-22 00:27:46

标签: prolog

我在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).

我跟踪了我的节目无济于事,感谢任何建议。 此外,对不起,如果这篇文章是群集的,这是我第一次在这里发帖。

1 个答案:

答案 0 :(得分:1)

我采用了另一种方法。将你的谓词用于排序的数字列表,并在附加的帮助下返回一个较小的“数字”(元素)列表(在列表的前面出现),这可以很容易地适应更大的值。

numbers([one,two, three, four, five]).
check_lower(N1,N2):-
    numbers(ALL),
    append(N1,[N2|_],ALL).