我使用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)
,但仍然无效。
答案 0 :(得分:1)
你可以尝试:
huntingbreeds(List),list_length(List, Count).