これまでに試したことがありますが、まだまだ私のための混乱です。それは最長のサブシーケンスだと思っていましたが、実際はそうではありません。もっと良い例を書いてください。私は2つの文字列を比較して同じ要素を持っているかどうかを確認し、それらを印刷するためにProlog述語を作成しようとしています(メンバーごとに1回のみ)。現在、私は簡単にチェックのための2つの異なるリストに文字列を取得するには、これを書いた:Prologでの2つの文字列の交差
しかし、私は悩み、これら二つのリストに彼らは関係なくすべての要素を比較するための正しい方法を見つけるのを持っています。私はそれが見つかるまで比較する方法を見つけましたが、それは真実を返しますが、両方のリストのすべての要素を比較して出力する必要があります。私はそれが頭と関係していることを知っていると知っているし、次の最初のメンバーを新しい頭などに追加する。しかし、私はそれをやる方法を見つけられない。また、交差点はちょっと必要なことをしますが、それは私にすべての要素を与えます(何回も繰り返します)。一致する要素が見つかったら一度停止する必要があります。
plates(X,Y,Mem,Num):-
atom_chars(X,Xs),
atom_chars(Y,Ys),
compare_list(Xs,Ys,Mem),
length(Mem,Num).
compare_list([], _, []).
compare_list([H1|T1], L, R) :-
(check_element(H1, L)
->R = [H1|R]
;R = R
),
compare_list(T1, L, R).
check_element(_, []).
check_element(X, [H|T]) :-
X = H,
check_element(X, T).
例1:
?-plates('111AXB','112XXX', Mem, Num).
万一出力:
Mem = ['1','1','X'],
Num = 3.
例2:
?-plates('456XYZ','678ABC', Mem, Num).
は、出力すべき:私はここで解決策を実装
Mem = ['6'],
Num = 1.
試してみました: PROLOG Comparing 2 lists
私のテスト:
?- plates('ABC123','123ABC',Mem,Num).
マイ出力:
期待Mem = [],
Num = 0.
:
Mem = ['A', 'B', 'C', '1', '2', '3'],
Num = 6.
しかし、私はそれが私はそれが... すべてのヘルプは非常に高く評価されるだろうと思ったように動作するように得ることができませんでした!
、また、この最後の例では、だからあなたのコードの出力 –
を追加し、あなたが期待する出力は何ですか? –
例を追加 – Alsar