计数列表大小由于findall在Prolog

时间:2017-07-09 17:17:40

标签: prolog prolog-findall

我使用findall获取特定列表,然后想要计算其中的元素数量。

即。

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

这会从我的数据库[beagle,basset]返回一个猎犬需求列表。

但现在如果我尝试使用我的新谓词计算它:

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

我的查询     ? - list_length(huntingbreeds(List),Count)。

这只会返回false。

我以为我可能需要使用arg,即

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

但它又返回false。 任何人都知道如何获得列表大小?我知道函数list_length就好像我给它一样:

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

我明白了     数= 3。

但是我不知道如何从查找结果中传递我的列表。我已经尝试将完整的findall语句替换为huntingbreeds(List),但仍然无效。

1 个答案:

答案 0 :(得分:1)

你可以尝试:

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