[解決済み] Prolog-リストを繰り返し実行する
2022-02-05 15:37:32
質問
例えば、次のようなリストがあるとします。
Xs = [a,b,c].
今、私はすべての要素を繰り返し処理し、その要素に対して別の関数を呼び出したいと思っています。質問は、headとtailを使用してこれを行うにはどうすればよいですか?私は助けを感謝したいと思います。
どのように解決するのですか?
一般に、Prologでは繰り返し処理を行いません。その代わり、次のように再帰的な節の組でルールを書きます。
dosomething([]).
dosomething([H|T]) :- process(H), dosomething(T).
最初の節は、基本的なケースを処理するもので、リスト
[]
は空です。この場合、何もすることがないので、ルールの本体も空になります。
2番目の節は、リストが少なくとも1つの要素を持っている場合の処理です。構文
[H|T]
は、以下のような方法でリストと統合されます。
H
がリストの先頭になり
T
はその末尾になります。例えば
dosomething([a,b,c])
,
H
になる
a
であり、かつ
T
は
[b,c]
.
このルールの本文は2つの部分からなる。最初の部分は、headを操作して
process
を付けています。これは、リストの各要素に対して実行させたいルールである。2番目の部分は
dosomething
ルールは、リストの末尾に対して再帰的に適用されます。末尾のリストが空でない場合、2番目の節である
dosomething
は、短い方のリストと統一して処理を続けます。末尾のリストが空になると、最初の節が単一化され、処理が終了する。
関連
-
[解決済み] Python (2.x) リスト / サブリスト選択 -1 の不具合
-
[解決済み] LINQを使用してList<T>から要素を削除する
-
[解決済み] リストを均等な大きさのチャンクに分割するにはどうしたらいいですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
最新
-
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 実装 サイバーパンク風ボタン