の要素を比較しますPrologは、いくつかの入力リストを与えられたとき、私は新しいリストを構築したいとそれが必要リスト
- を常に
- 新しいリストの前に時間を追加するごとに二つの連続する要素を比較します と等しい場合は、新しいリストにyを追加し、そうでない場合はxを追加します。
例:
?- control([a,a,b,b],R).
R = [h,y,x,y].
ここでは、これまでに私のコードです:
control([H,H|T],K,[K,0|T2]):- control([H|T],[K,0],T2).
control([H,J|T],K,[K,1|T2]):- control([J|T],[K,1],T2).
control([H],G,G).
は、しかし、それは正常に動作していません。
?- control([a,a,b,b],[h],L).
L = [[h], 0, [[h], 0], 1, [[[h], 0], 1], 0, [[[...]|...], 1], 0] ;
L = [[h], 0, [[h], 0], 1, [[[h], 0], 1], 1, [[[...]|...], 1], 1] ;
L = [[h], 1, [[h], 1], 1, [[[h], 1], 1], 0, [[[...]|...], 1], 0] ;
L = [[h], 1, [[h], 1], 1, [[[h], 1], 1], 1, [[[...]|...], 1], 1] ;
false.
どのように修正できますか?結果に「X」または「Y」を追加し、それぞれ両方の句で
% Two elements being read are the same -> add y
control([H,H|T],[y|R]) :- control([H|T],R).
% Two elements being read are not the same -> add x
control([H1,H2|T],[x|R]) :- H1 \== H2, control([H2|T],R).
は、我々が最初にチェック要素が、全てで再帰呼び出しを行うと:
を例にどのようにあなたを教えてくださいこれが動作することを期待してください。 – false
だからちょうどそれが動作し、それを使用する方法を示すふりをする。 – false
私はいくつかの改善がありました。ここに私の新しいコードがあります。 karama([H、H | T]、[0 | L]): - karama([H | T]、L) カラマ([H、J | T]、[1 | L]): - カラマ([J | T]、L)。 カラマ([H]、[])。 init(A、Xs、[A | L]): - karama(Xs、L)。 これは私に ?init(1、[1,1,0,0]、M)を与えます。 M = [1,0,1,0]; M = [1,0,1,1]; M = [1,1,1,0]; M = [1,1,1,1]; false。 しかし、私は最初の1つが発生したい – mrnard