[解決済み】Prologでリストを反転させる
2022-02-14 01:38:47
質問
プログラミングの授業の宿題を終えました。 私はリストを反転させるPrologプログラムを作成することになっていました。 しかし、なぜそのようなプログラムができるのかが理解できず困っています。
%1. reverse a list
%[a,b,c]->[c,b,a]
%reverse(list, rev_List).
reverse([],[]). %reverse of empty is empty - base case
reverse([H|T], RevList):-
reverse(T, RevT), conc(RevT, [H], RevList). %concatenation
この場合、RevTとは一体何なのでしょうか? Tまたは与えられたリストの残りの部分の逆を表すことになっているのは知っていますが、私はそれを何かに割り当てていないので、それがどのような値を持つことができるのかわかりません。 RevTはRevListと同じような役割を果たすだけで、再帰的な呼び出しのたびに使うのでしょうか?
また、conc()関数の呼び出しで、なぜHだけでなく[H]を使わなければならないのでしょうか? H はリストの先頭を指すのではないのですか(ex: [H])? それとも、単にリストの先頭の項目(Hだけ)を参照しているのでしょうか?
この点をクリアにするために、ご協力をお願いします。 このようなプログラミングのロジックを理解するのに苦労しています。
どのように解決するのですか?
解答を説明します。 空のリストを反転させると、空のリストが得られます。 リスト[H|T]を反転させると、Tを反転させて[H]と連結したリストが得られます。 この再帰節が正しいことを確認するために、リスト [a,b,c,d] を考えてみよう。このリストの末尾を逆にすると、[d,c,b] が得られる。これを[a]と結合すると[d,c,b,a]となり、[a,b,c,d]の逆順となる。
もう一つの逆解。
プレ reverse([],Z,Z).
reverse([H|T],Z,Acc) :- reverse(T,Z,[H|Acc]).
を呼び出します。
?- reverse([a,b,c],X,[]).
詳しくはこちらをご覧ください。 http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse25
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Pythonで一定の大きさの空リストを作成する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Haskellを学ぶ。HaskellでListからアイテムを削除する方法
-
[解決済み】Prologでリストを反転させる
-
[解決済み] Python (2.x) リスト / サブリスト選択 -1 の不具合
-
[解決済み] Prologにおける"!"とは
-
[解決済み] Prolog リストから要素を削除する
-
[解決済み] Haskellでelemを使わずにリストから重複を削除する
-
[解決済み] Prologでリストを平坦にする
-
[解決済み] OCaml標準ライブラリ関数によるリストの並べ替え
-
[解決済み] Powershellですべてのデバイス、パーティション、ボリュームを一覧表示する
-
[解決済み】大きなリストの中のn番目の項目のリストを返すPythonicな方法