为什么[] = _。在Prolog中是真的吗?

时间:2017-07-13 17:30:14

标签: prolog

我正在学习Prolog,并且不明白为什么[]在SWI-Prolog中返回true。 _表示空列表,curl -k 'https://192.168.1.1/' -H 'Host: 192.168.1.1' -H 'blah' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.8' 表示它不为空,对吧? 有人可以解释上述逻辑吗?

1 个答案:

答案 0 :(得分:9)

_是一个逻辑变量,就像X或以下划线或大写字母开头的任何其他内容。自由变量(即,尚未绑定到某个术语的变量)可以与任何东西统一。像[] = X这样的目标说“将X[]统一”,其效果是,如果成功,X的每次使用都会引用[]这个词}。

使用_作为变量,这与X相同,但_匿名变量除外:它无法重复使用,它的名称无关紧要,_的不同出现引用了不同的变量。因此_在遇到目标[] = _之前永远不会受到约束。因此,这种统一成功,这就是你得到答案的原因true

_本身并不意味着“不空”。但是你可能会因为它作为占位符而被混淆:L = [_,_,_]意味着L是三个元素的列表(我们一无所知)。在这个意义上,_意味着“这里有一些东西”。但它必须是里面的这个意思的列表。