(==)/2
不是比较什么是评估。它不评估它的论点。它只有在参数已经被实例化为匹配项时才会成功。
在Prolog,not(not(true))
是一种化合物的术语,其是术语not/1
带一个参数,not(true)
,本身是由具有不带参数的术语true/0
的一个参数的not/1
的术语。它没有价值。除了在某些情况下,它甚至不会被“执行”。在Prolog中,如果参数失败,则谓词not/1
成功,如果参数成功,则谓词失败。这不是值或功能结果,而是一种行为。这是假设它出现在上下文中,如以下:
not(not(true)),
write('This will be written out because not(not(true)) succeeded'), nl.
在Prolog中表达true == not(not(true))
是一个化合物而言,等同于:
'=='(true, not(not(true)))
在这方面,not(not(true))
不评估。 Prolog将首先练习(==)/2
等价运算符,如果它的参数被实例化为相同的术语,则该运算符成功。 Prolog中的术语true
和not(not(true))
是否相同(或等同)?不,他们不是。一个是没有参数的简单术语(true/0
)。另一个是复合术语:一个有一个参数的术语,它本身就是一个有一个参数的术语。因此(==)/2
在这里失败。
请注意,(=:=)/2
是完全不同的。它是一个运算符,用于比较算术表达式的结果。参数必须是可评估的算术表达式,如果它们评估的结果相同,则参数将成功,否则将失败。
您在其他地方使用过'not(not(false))'而'not(not(true))'。那是故意的吗? – user2357112
不,错字。 Sry基因。修复。 – daniel451