Prolog – 操作符的绑定

我正在做Ivan Bratko的《Prolog Programming for Artificial Intelligence》一书中的练习。练习要求如下:

定义操作符’if’、’then’、’else’和’:=’,使得以下表达式成为合法项:

if X > Y then Z := X else Z := Y

选择优先级,使’if’成为主要函子。

我在确定操作符’then’和’else’中哪个应该具有较低的优先级(并更强地绑定)时遇到了麻烦。我对这个问题的回答是:

:- op(900, fx, if).:- op(800, xfx, else).:- op(700, xfx, then).:- op(600, xfx, :=).

(书中也提到’>’操作符的优先级为700)。

我原本以为’then’的绑定强度会比’else’强,然而练习的答案却表明并非如此:

:- op(900, fx, if).:- op(800, xfx, then).   :- op(700, xfx, else).  :- op(600, xfx, :=).

我对’else’的优先级低于’then’的理由不太确定。任何见解都将不胜感激。


回答:

例如,考虑使用你的定义:

?- write_canonical(if a then b else c).if(else(then(a,b),c))true.

以及书中的定义:

?- write_canonical(if a then b else c).if(then(a,else(b,c)))true.

进一步,使用你的定义:

?- write_canonical(if a then (if b then c) else d).if(else(then(a,if(then(b,c))),d))true.

以及书中的定义:

?- write_canonical(if a then (if b then c) else d).if(then(a,else(if(then(b,c)),d)))true.

特别注意,使用你的定义,if ... then ... else有时被解析为if(else(...,有时被解析为if(then(...

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注