在Prolog中,如何定义运算符“relation”作为关系/ 3谓词?例如:
relation a b c.
并制作它:
relation(a, b, c).
谢谢!
答案 0 :(得分:5)
首先,运营商不是关系,也不是谓词。运算符是一种语法特征,它们只是为了帮助我们节省输入括号:
:- op(250,xfy,#).
然后
4 ?- X = 2#3#5, write_canonical(X).
#(2,#(3,5))
X = 2#3#5.
现在,您可以根据需要定义将处理此类复合词的谓词。这当然与
没什么不同5 ?- X=[2,3|5], write_canonical(X).
'.'(2,'.'(3,5))
X = [2, 3|5].
语法级别无法将复合术语的嵌套限制为仅两个级别。处理它们的谓词必须从无效的案例中辨别出有效性。
7 ?- Y=2#3#5#7, write_canonical(Y).
#(2,#(3,#(5,7)))
Y = 2#3#5#7.
或者,您可以串联使用两个非关联运算符:
:- op(250,xfx,#).
:- op(350,xfx,@).
然后
10 ?- X=2@3#5, write_canonical(X).
@(2,#(3,5))
X = 2@3#5.
11 ?- X=2@3#5#7, write_canonical(X).
ERROR: Syntax error: Operator priority clash
ERROR: X=2@3#
ERROR: ** here **
ERROR: 5#7, write_canonical(X) .