特定のリストに要素を追加することについて質問があります。これは、3 つの変数述語によって実行できることを知っていますappend([Item], List, [Item | List])
。2 つの変数だけを使用するのはどうですか? のようappend([Item], List)
に、List が既存のリストであることも実現できますか?
質問する
2616 次
2 に答える
1
CapelliCの答えは完全に正しいです。わかりやすくするために、Prolog の述語には、他の言語の関数やプロシージャのように戻り値がないことを付け加えたいと思います。この背後には複数の理由があります (そして、論理プログラミングについて多くのことが書かれています)。今のところ、述語 like の強みは、append/3
2 つのリストを追加して新しいリストを形成できるだけでなく、リストを 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 に答える