2つのリスト(同じ長さ)で、同じ位置にある要素の数を計算したいと思います。 例: A = [3,6,7,9]とB = [2,6,4,9]のリストを持っているとします。メッセージに「2頭の雄牛が見つかりました。 "Prolog、counter
これまでのところ私はこの作られています
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にそれを渡し、別のルールから呼び出されます。 どうすれば '雄牛'の値を画面に表示するのですか?どんな助け?
編集 ので好きのポストした後、私はこのテストプログラムのテスト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.' –
ありがとうございます。それはうまく動作します! –