[解決済み] Prologでリストを追加するにはどうしたらいいですか?
質問
Prologでリストを追加する方法を教えてください。インターネットで検索したところ、このようなものが見つかりました。 http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html )
append([X|Y],Z,[X|W]) :- append(Y,Z,W).
append([],X,X).
そのため
Z
の要素を削除することで
[X|Y]
で
[X|W]
. しかし、2つのリストを一緒に追加するにはどうすればよいのでしょうか?
例
appendlist([1,2],[3,4,5],X).
その結果、次のようになります。
X = [1,2,3,4,5]
.
また、再帰の中で何が起こっているのかわかりません。(トレースしてみたけどよくわからなかった)。
EDITです。
私が知りたいのは、どのようにコーディングすれば、定義済みの
append()
をPrologで作成しました。
どのように解決するのですか?
投稿されたコードで(ほぼ)OKです。節の順序を入れ替えるだけです(この述語の定義を生成的な方法で使用したときに、生産的にするため)。
append( [], X, X). % (* your 2nd line *)
append( [X | Y], Z, [X | W]) :- append( Y, Z, W). % (* your first line *)
これは、3つの引数の関係を定義するもので、仮に
A
,
B
と
C
.
最初の行に書いてありますね。
"です。
C
を追加した結果です。
A
と
B
もし
A
と
C
が空でないリストである場合,両者は同じ
頭
(すなわち、最初の要素)、および
テール
の
C
の末尾を追加したものです。
A
を同じ第2引数で指定します。
B
"
.
a a
----------
b b
c c
. d d
e e
. .
または左から右へ。
a | b c .
| d e .
a | b c d e .
append( [],
Z,
Z ).
append( [X | Y ],
Z,
[X | W ] ) :- append(
Y, Z, W).
考えてみてください、完璧に理にかなっています。これは何をするかというと、私たちが定義したいのは
append/3
そして、その関係がどうあるべきかがわかっているので、その関係が満たすべき明らかな事実、いわばその関係が従うべき法則を書き記すだけなのです。
では、このコードがすでに定義されていると仮定して、どんな法則に従わなければならないのでしょうか?明らかに、あるリストの末尾と別のリストを足すと、完全なリストとその2番目のリストを足した結果の末尾が得られます。
これは、最初のリストをどのようにスライドさせるかを定義しています。しかし、これ以上スライドさせるところがなかったらどうでしょう?リストの最後に到達したらどうでしょう?その場合、空のリストに到達したことになり、空のリストに別のリストを追加すると、結果としてそのリストが得られます。もちろんです。そして、あなたのコードの2行目は、それを教えてくれているのです。 を追加します。 空リスト と他のリストとの組み合わせは、そのリストを結果として生成する"。 .
驚くべきことに、この2つの法則を書き記すことで
append/3
は、定義そのものを書き下ろしたのと同じことです。
を追加しました。 は、宣言的な観点から説明しています。 m09 の回答 は、より運用の観点から見たものです。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] Bashで標準出力と標準エラーの両方をファイルにリダイレクトして追記する方法
-
[解決済み] 2つのリストを辞書に変換するにはどうしたらいいですか?
-
[解決済み】配列に何かを追加する方法は?
最新
-
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でリストを反転させる
-
[解決済み] TypeError: リストのインデックスは整数でなければならず、floatではない
-
[解決済み] Prolog リストから要素を削除する
-
[解決済み] PrologでListの要素をプリントアウトする
-
[解決済み] リスト内の連続した重複を識別する最もPythonicな方法は何でしょうか?
-
ERROR:バイナリへのオペランドが無効です。
-
IEnumerableとDataTableの互換性
-
リストコレクションに関するいくつかの一般的な操作
-
[解決済み] Powershellですべてのデバイス、パーティション、ボリュームを一覧表示する