我试图列出我在List中存储的给定数量的元素,我的代码如下
er(Person,List): - findall(A,后代(Person,A),List)。
当我在prolog中输入以下代码时,我得到了与我的查询匹配的所有元素。
ER(詹姆斯,X)。
我想要实现的是要求prolog列出给定数量的元素,例如
ER(詹姆斯,3)。
Prolog只会从列表中返回最多3个元素。我研究了一下,发现我可以使用findnsols而不是findall运算符,但我找不到在我的代码中实现它的实用方法。
答案 0 :(得分:-1)
嗯,显而易见的方法就是这样说:
er(P,N,L) :-
findnsols(N,A,descendant(P,A),L)
.
但你似乎不想这样做。你可能会考虑这样的事情:
er(P,L) :-
var(L),
findall(A,descendant(P,A),L)
.
er(P,L) :-
nonvar(L),
length(L,N),
findnsols(N,A,descendant(P,A),L)
.
如果你想要所有的解决方案,只需像这样调用它:
er(james,L).
如果你想限制一些事情,比如:
er(james,[A,B,C]).
或(因为length/2
可以是生成的):
length(5,L) , er(james,L).