[解決済み] SWI-Prologでリストから重複を削除する方法は?
2022-02-17 19:42:02
質問内容
述語を書く必要があります
remove_duplicates/2
は、与えられたリストから重複する要素を削除します。例えば
?- remove_duplicates([a,a,b,c,c], List). List = [a,b,c] Yes
SWI-Prologを学んで2日目、Prologの基本しか理解していないことをご留意ください。これは、私が今持っているものです。
remove_duplicates([H | T], List) :- member(H, T), append(T, [], List1).
これはリストに対して機能します。
[a,a,b,c]
が、末尾の2つの要素が同じであるリストには適用されません。どうにかして、一時的なリストにHeadを削除し、新しいHeadを作成し、ただ述語を繰り返さなければならないと考えました。どうすればいいのか全くわかりません。また、HeadがTailにない場合、例えば次のようなリストでは
[a,b,b,c]
と表示されるだけで、端末は
False
というのも
member(H, T)
は真ではありません。
何か思い当たることはありますか?
解決方法は?
重複を除去するためのシンプルで素晴らしいコードは、以下の通りです。
remove_duplicates([], []).
remove_duplicates([Head | Tail], Result) :-
member(Head, Tail), !,
remove_duplicates(Tail, Result).
remove_duplicates([Head | Tail], [Head | Result]) :-
remove_duplicates(Tail, Result).
で説明したように Prolog入門(ウルレ・エンドリス著
関連
-
[解決済み】Prolog - 引数が十分にインスタンス化されていない
-
[解決済み] "シンタックスエラー。Prologで「演算子が期待されています。
-
[解決済み] Prologにおけるエクスクラメーションマーク
-
[解決済み] SWI-Prologでリストから重複を削除する方法は?
-
[解決済み] Prologは初めてです。このコードを実行しようとすると、 - ERROR: Undefined procedure: teaches/2 (DWIM could not correct goal) が表示されます。
-
[解決済み] Prologの未定義手続きエラー
-
[解決済み] Prologでは%記号はどのような意味ですか?
-
[解決済み] Prologにおける"˶‾‾‾"とは何ですか?
-
[解決済み] Prolog ㊙と㊙の違いは何ですか?
-
[解決済み] 論理プログラミングに関して、PrologとminiKanrenの主な技術的な違いは何でしょうか?[クローズド]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Prolog - 引数が十分にインスタンス化されていない
-
[解決済み] "シンタックスエラー。Prologで「演算子が期待されています。
-
[解決済み] "シンタックスエラー。Prologで「演算子が期待されています。
-
[解決済み] Prologにおけるエクスクラメーションマーク
-
[解決済み] SWI-Prologでリストから重複を削除する方法は?
-
[解決済み] Prolog - 回文ファンクタ
-
[解決済み] Prologの未定義手続きエラー
-
[解決済み] Prologにおける"˶‾‾‾"とは何ですか?
-
[解決済み] Prolog ㊙と㊙の違いは何ですか?
-
[解決済み] 論理プログラミングに関して、PrologとminiKanrenの主な技術的な違いは何でしょうか?[クローズド]。