【发布时间】:2015-04-23 23:25:33
【问题描述】:
我正在尝试列出我存储在 List 中的给定数量的元素,我的代码如下
er(Person,List) :- findall(A, descendant(Person, A), List).
当我在 prolog 中键入下面的代码时,我得到了与我的查询匹配的所有元素。
呃(詹姆斯,X)。
我想要实现的是让 prolog 列出给定数量的元素,例如
呃(詹姆斯,3)。
Prolog 最多只会返回列表中的 3 个元素。我研究了一下,发现我可以使用 findnsols 而不是 findall 运算符,但我找不到在我的代码中实现它的实用方法。
【问题讨论】:
-
findnsols(3, A, descendant(Person, A), List) 应该可以工作。请解释您的问题...
-
findnsols 对我来说不是最佳选择,因为它需要两个以上的元素才能将其保持在 er(X,Y) ,我对 findnsols 的问题也是我必须在查询而不是在程序本身中键入它。比如
findnsols(Nth, A, descendant(Person, A), List).,第n个可以是0到999之间的任何数字。 -
findnsols(count(N), etc etc) 允许“动态”更改返回的列表长度。但这个高级功能似乎超出了您的需求。在某些时候,在调用 findnsols 之前,您会知道值 Nth,不是吗?所以就用它吧
标签: prolog