2010-09-26 78 views
0

的問題是:如何計算使用PROLOG的奇數和偶數

當我們鍵入mem([1,2,3,4,5])。

,我們將得到的輸出波紋管:

奇= 3

即使= 2

我的編碼是這樣的,但不能運行。可以幫助我檢查我的錯誤在哪裏?

mem(X,[X | L])。 (X,[element | L]): - mem([X,L])。

count([],L,L)。

計數([X | H],L1,L2): - 寫(偶數), X%2 = 0,NL, 寫入(奇數), X%2> = 1,NL, 計數([H],[X | L1],L2)。

感謝您的幫助。

回答

2

你寫的程序做了兩件不同的事情,實際上並不在一起。 mem/2相當於通常內置的member/2,只是您的定義包含錯誤:第二個子句中的element是原子而不是變量,因此它不會與列表中的其他元素相匹配。通常的定義是

member(X, [X|_]). 
member(X, [_|L]) :- member(X, L). 

請注意,這個定義不僅會測試一個術語是否是一個列表的元素,但甚至可以用來生成一個列表。

你到底在做什麼count/3:將列表分成兩個列表,一個包含奇數,另一個包含偶數;或計算奇數和偶數元素的數量?

count([], [], []). 
count([X|L], O, E) :- X rem 2 =/= 0, count(L, [X|O], E). 
count([X|L], O, E) :- X rem 2 =:= 0, count(L, O, [X|E]). 

注意的參數作爲算術表達式=/= /2=:=/2力評價,同時= /2嘗試統一它的參數:分裂可以用類似來完成。

計算賠率和平均次數可以用類似的方式完成,並留給讀者作爲練習。 :-)