2017-07-09 17 views
0

我使用findall获得了一个特定的列表,然后想要计算它中的元素数量。由于findall在Prolog中不工作而引起的计数列表大小

huntingbreeds(List) :- 
    findall(Breedname, breed(Breedname,_,hunting), List). 

这从我的数据库[小猎犬,巴塞特]返回猎狗的需求列表。

但现在,如果我尝试使用我的新谓词算什么?

list_length([] , 0). 
list_length([_|Xs] , L) :- 
     list_length(Xs,N) , 
     L is N+1 . 

与我的查询 - list_length(huntingbreeds(列表),计数)。

这只是返回false。

我想我可能需要使用ARG即

?- list_length(arg(1,huntingbreeds(List),L), Count). 

但再次返回false。 任何人都知道我可以如何获得名单大小?我知道list_length工作,如果我给它的功能:

?- list_length([1,2,3], Count). 

我得到 计数= 3

但就是不知道如何通过它查找结果我的名单。我曾尝试将完整的findall语句替换为huntingbreeds(List),但仍然没有任何结果。

回答

1

你可以尝试:

huntingbreeds(List),list_length(List, Count). 
+0

感谢您的建议,但我必须创建具有2个参数是list_length断言:list_length(列表,算),但您的评论帮助我创造了它是这样的: List_And_Count(L,Count): - huntingbreeds(L),list_length(L,Count)。 – ildsarria

+0

很高兴帮助! – coder