2014-02-25 31 views
0
my_list([hello,hello,hello]) 

counthowmany(_, [], 0) :- !. 
counthowmany(X, [X|Q], N) :- !, counthowmany(X, Q, N1), N is N1+1. 
counthowmany(X, [_|Q], N) :- counthowmany(X, Q, N). 

在上面的代碼,如果編譯緩衝區之後問的Prolog我怎麼能叫Prolog的規則,同時要求序言

my_list(L),counthowmany(hello,L,N). 

這個問題,那麼它給我的問候數量.....

現在如果我修改以下方式

my_list([hello,hello,hello]) 

counthowmany(_, [], 0) :- !. 
counthowmany(X, [X|Q], N) :- !, counthowmany(X, Q, N1), N is N1+1. 
counthowmany(X, [_|Q], N) :- counthowmany(X, Q, N). 

numberofhello :- my_list(L), counthowmany(hello,L,N). 

% i. e. I want to insert the question in a rule 

和編譯緩衝後的代碼(雖然我得到一個單變量警告)如果我問的Prolog

numberofhello. 

它只是給我「真」,我不明白你好的數量。

+0

[如何在prolog中的謂詞中傳遞列表]的可能重複(http://stackoverflow.com/questions/21971270/how-to-pass-a-list-in-a-predicate-in-prolog ) – false

回答

0

您的問題是您的查詢(numberofhello.)沒有變量(即「wh-word」),因此變成「您能計算多少個hellos?」是 - 不是問題而是「多少個問題」。這應該可以解決它:

numberofhello(N) :- my_list(L), counthowmany(hello, L, N). 

有了這個,

?- numberofhello(N). 

你應該讓你的N = 3

+0

它的工作........ – Ishrak