关于Prolog运算符列表正确性及is运算符对立项的技术问询
Prolog运算符问题解答
A)当前整理的运算符列表是否正确?
你整理的这份运算符对应关系完全正确,逐个说明如下:
X = Y:判定两个项能否合一,注释描述准确。X is Y:将右侧表达式Y求值后绑定给左侧变量X,注释“X等于Y的求值结果”表述到位。X =:= Y:对左右两侧的表达式分别求值,再比较结果是否相等,注释正确。X == Y:不执行求值操作,直接检查两个项是否恒等(结构、值完全一致,变量需绑定至相同内容),注释准确。X \= Y:=的否定形式,判定两个项无法合一,注释正确。X =\= Y:=:=的否定形式,对左右两侧求值后判定结果不相等,注释正确。X \== Y:==的否定形式,判定两个项不恒等,注释正确。
B)Prolog中的is运算符是否存在对应的对立运算符?
is本质是求值绑定运算符,核心作用是把右侧表达式的计算结果赋值给左侧变量,并非纯粹的比较类运算符,因此Prolog中没有专门对应它的“对立运算符”。
如果要实现“X不等于Y的求值结果”的逻辑,可以通过以下两种方式:
- 用否定符
\+包裹原操作:
注意变量状态:若f(X, Y):- \+ (X is Y).X是未绑定变量,X is Y会先将X绑定为Y的求值结果,此时\+ (X is Y)会失败;若X已绑定,则直接检查X的值是否不等于Y的求值结果,符合需求。 - 先求值再做不等判定:
这种方式先将f(X, Y):- Y_eval is Y, X \= Y_eval.Y的求值结果存入临时变量Y_eval,再判定X与Y_eval无法合一,效果和第一种一致,逻辑更直观。
内容的提问来源于stack exchange,提问作者Frodo
相关产品推荐
相关产品推荐

