表記法[H|T]
は、 のシンタックス シュガーです'.'(H, T)
。したがって、これは名前を持つファンクタ.
です。1 つのドットと 2 つの引数です。検討:
?- [1,2,3] = [X|L] .
X = 1、
L = [2, 3]。
ここで、方程式の解があるかどうかを尋ねます[1,2,3] = [X|L]
。そして、はい、これらの 2 つの回答置換で説明されている解決策は 1 つだけです。この方程式を解くプロセスは、ユニフィケーションと呼ばれます。このプロセスには、データ構造の読み取り、選択、および書き込みが含まれます。したがって、これを「頭を脱ぐ」と呼ぶことはできますが、背後にある一般性を見逃すことになります。結局:
?- X = 1、L = [2, 3]、M = [X|L]。
X = 1、
L = [2, 3],
M = [1, 2, 3]。
ここでは、小さなリストから新しいリストを作成しました。しかし、次のとおりです。
? -M = [X|L]。
M = [X|L]。
この答えは、多くの解決策を意味します。たとえば、長さが 1 以上のすべてのリスト。
を見ているのでappend/3
、次のクエリを検討してください。
?- append(Xs, Ys, [X,Y,Z])。
?-追加 (Xs、Xs、Zs)。
?- append(Xs、Ys、Zs)
リスト構文の詳細。