1. ホーム
  2. list

[解決済み] 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 は、短い方のリストと統一して処理を続けます。末尾のリストが空になると、最初の節が単一化され、処理が終了する。