【问题标题】:Terminate Query after Failure PrologProlog 失败后终止查询
【发布时间】:2018-02-22 18:53:17
【问题描述】:

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

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

【问题讨论】:

  • number/1 是一个内置谓词。你不能自己定义。
  • 我没听懂,谢谢。

标签: prolog


【解决方案1】:

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

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

【讨论】:

  • 嘿,这个真的好用,如果不是太麻烦,能简单介绍一下它是怎么做的吗?
  • append 谓词有 3 个列表作为参数。首先,我们得到numbers 谓词numbers(ALL) 的列表,我们希望在N1 中返回一个列表,其中包含N2 元素之前的元素。因此,例如我们可以像这样使用append append([one,two],[three,four,five],N)N 将是一个列表[one,two,three,four,five]。如您所见,第二个参数是一个具有 Head N2 值和一个 Tail 值的列表,我们不需要该值,所以我们不需要设置一个变量。这个附加谓词的结果应该给出所有numbers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2022-11-18
相关资源
最近更新 更多