我正在学习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'
表示它不为空,对吧?
有人可以解释上述逻辑吗?
答案 0 :(得分:9)
_
是一个逻辑变量,就像X
或以下划线或大写字母开头的任何其他内容。自由变量(即,尚未绑定到某个术语的变量)可以与任何东西统一。像[] = X
这样的目标说“将X
与[]
统一”,其效果是,如果成功,X
的每次使用都会引用[]
这个词}。
使用_
作为变量,这与X
相同,但_
是匿名变量除外:它无法重复使用,它的名称无关紧要,_
的不同出现引用了不同的变量。因此_
在遇到目标[] = _
之前永远不会受到约束。因此,这种统一成功,这就是你得到答案的原因true
。
_
本身并不意味着“不空”。但是你可能会因为它作为占位符而被混淆:L = [_,_,_]
意味着L
是三个元素的列表(我们一无所知)。在这个意义上,_
意味着“这里有一些东西”。但它必须是里面的这个意思的列表。