0

特定のリストに要素を追加することについて質問があります。これは、3 つの変数述語によって実行できることを知っていますappend([Item], List, [Item | List])。2 つの変数だけを使用するのはどうですか? のようappend([Item], List)に、List が既存のリストであることも実現できますか?

4

2 に答える 2

1

CapelliCの答えは完全に正しいです。わかりやすくするために、Prolog の述語には、他の言語の関数やプロシージャのように戻り値がないことを付け加えたいと思います。この背後には複数の理由があります (そして、論理プログラミングについて多くのことが書かれています)。今のところ、述語 like の強みは、append/32 つのリストを追加して新しいリストを形成できるだけでなく、リストを 2 つに分割できることです。

?- append(Start, [c,d,e], [a,b,c,d,e]).

または、リストのすべての可能な分割を列挙することもできます (非決定論的):

?- append(X,Y,[a,b,c]).

完全にインスタンス化されたリスト[a,b,c](変数を含まない) は、Prolog 述語のコンテキスト内では変更できません。appendの場合、追加の要素を持つ新しいリストのみをインスタンス化できます。

于 2013-04-10T11:23:25.420 に答える
0

追加する要素、要素を含まないリスト、これらの連結の 3 つの要素が必要です。そうすると、2要素だけではできません。

append([Item], List, Result)より便利に書くことができ、結果の最初の要素になること[Item|List] = Resultに注意してください。Item次に、追加していません。あなたはで行うことができますappend(List, [Item], Result)

于 2013-04-10T11:05:38.443 に答える