2017-07-09 42 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