我想在兩個列表(相同長度)中計算相同且位於相同位置的元素數。例如: 假設我們有列表A = [3,6,7,9]和B = 」。序言,計數器
到目前爲止,我有此:
bulls([],[]).
bulls([Ha|Ta],[Hb|Tb]) :-
Ha = Hb,
writeln('bull found'),
bulls(Ta,Tb);
bulls(Ta,Tb).
每當存在於兩個列表中的相同位置的元素,消息「公牛找到」被打印出來。 在我心目中,我想讓這樣的事情:
bulls([],[],_).
bulls([Ha|Ta],[Hb|Tb],Counter) :-
Ha = Hb,
NewCounter is Counter + 1,
bulls(Ta,Tb,NewCounter);
bulls(Ta,Tb,NewCounter).
bulls(List1,List2):- bulls(List1,List2,0).
bulls
是從通過排行榜中它的另一個規則調用。 我如何製作它,以便將「公牛」的值打印到屏幕上。任何幫助?
編輯 所以經過蘇基的後,我做了這個測試程序測試2所列出:
bulls([],[],X), write(X), write('bulls found'),fail.
bulls([Ha|Ta],[Hb|Tb],Counter) :-
Ha = Hb,
NewCounter is Counter + 1,
bulls(Ta,Tb,NewCounter);
bulls(Ta,Tb,NewCounter).
check(List1,List2):-
bulls(List1,List2,0).
start:-
A=[1,1,1,1],
B=[2,1,2,1],
writeln(A),writeln(B),
check(A,B).
,我得到這樣的結果
1 ?- start.
[1,1,1,1]
[2,1,2,1]
ERROR: bulls/3: Arguments are not sufficiently instantiated
我在做什麼錯誤?
謝謝您的幫助。不,我沒有得到一個錯誤,但輸出不是我所期待的。我開玩笑地說'1' - 開始。 [1,1,1,1] [2,1,2,1] false.' – 2012-02-09 11:24:47
非常感謝。它工作正常! – 2012-02-09 11:30:28