0

我使用 findall 获得了一个特定的列表,然后想计算其中的元素数量。

IE

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)。

这只是返回假。

我想我可能需要使用 arg 即

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

但它再次返回错误。有人知道我如何获得列表大小吗?我知道函数 list_length 就像我给它一样工作:

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

我得到计数​​ = 3。

但只是不知道如何从查找结果中将其传递给我的列表。我曾尝试将完整的 findall 声明代替,huntingbreeds(List)但这仍然无济于事。

4

1 回答 1

1

你可以试试:

huntingbreeds(List),list_length(List, Count).
于 2017-07-09T17:29:46.837 回答