列出列表序言中给定数量的元素

时间:2015-04-23 23:25:33

标签: prolog

我试图列出我在List中存储的给定数量的元素,我的代码如下

  

er(Person,List): - findall(A,后代(Person,A),List)。

当我在prolog中输入以下代码时,我得到了与我的查询匹配的所有元素。

  

ER(詹姆斯,X)。

我想要实现的是要求prolog列出给定数量的元素,例如

  

ER(詹姆斯,3)。

Prolog只会从列表中返回最多3个元素。我研究了一下,发现我可以使用findnsols而不是findall运算符,但我找不到在我的代码中实现它的实用方法。

1 个答案:

答案 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).