gpt4 book ai didi

prolog - Prolog中arity 3的运算符

转载 作者:行者123 更新时间:2023-12-05 01:06:37 24 4
gpt4 key购买 nike

在 Prolog 中,如何定义运算符“关系”以用作关系/3 谓词?例如:
relation a b c.
并制作它:
relation(a, b, c).
谢谢!

最佳答案

首先,运算符不是关系,也不是谓词。运算符是一种语法特征,它们只是为了帮助我们节省输入括号:

:- 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) .

关于prolog - Prolog中arity 3的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19927831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com