2017-07-13 17 views
3

私はPrologを勉強していますが、なぜ?- [] = _.がSWI-Prologでtrueを返すのか理解できません。 []は空のリストを意味し、_は空ではないことを意味します。
誰かが上記のロジックを説明できますか?なぜ[] = _なのですか? Prologでは本当ですか?

+0

任意の匿名の空ではないリストは、匿名の頭部と匿名の尾を持つリストである '[_ | _]'で表されます。 '_'自体は何かと一体化しています。 '1 = _.'、' a(b、c)= _.'、 'x = _.'もすべて真です。 – lurker

答えて

9

_は論理変数で、Xまたはアンダースコアまたは大文字で始まるものと同じです。自由変数(つまり、何らかの言葉にまだ縛られていない変数)は何でも統合することができます。 [] = Xのような目標では、 "X[]と統合する"というメッセージが表示され、成功した場合はXを使用するたびに[]という用語が使用されます。変数として_

これは_匿名変数であることを除いて、Xの場合と同じである:それは問題では、と_の異なる出現は違う変数を参照していない、その名前を再利用することはできません。だから_は目標[] = _に遭遇する前に縛られることはありません。したがって、この統一は成功します。そのため、答えはtrueです。

_それ自身では「空ではない」という意味ではありません。しかし、あなたはプレースホルダーとしての使用によって混乱するかもしれません:L = [_,_,_]は、Lが3つの要素のリストであることを意味します。この意味で_は「ここに何かがある」という意味です。しかし、の中には、という意味のリストが含まれていなければなりません。

関連する問題