Prolog中的关系运算符符号3向比较

问题描述 投票:1回答:1

Prolog标准ISOIEC 13211-1:1995Cor.2:2012具有以下特点 compare/3:

8.4.2 比较3 - 三方比较

8.4.2.1 说明

compare(Order, X, Y)为真,条件是Order与R统一,而R是下列原子之一。'=' iff X和Y是相同的项(3.87), '<' iff X term_precede Y (7.2), '>' iff Y term_precede X. [...]

最近,我突然意识到,使用原子 <, => 是有些奇怪的。

  • 谓词 (<)/2(>)/2 表示 算术 比较。

  • 谓词 (=)/2 另一方面是 句法 术语 统一.

IMHO,一个 很多 更加自然的选择是......。@<, ==@>,因为这些恰恰是其满足度由以下因素决定的谓词。compare/3.

那么:为什么原子 <=> 选而不 @<==@>?

prolog api-design iso-prolog
1个回答
3
投票

最近,我发现使用原子<、=和>有些奇怪。

这个 compare/3 谓词在进入ISO Prolog Core标准之前已经存在于多个Prolog系统中。这里的选择(当时我是WG17 Core的编辑)是为了保持向后的兼容性。


2
投票

compare/3 自1982年以来作为一个内置存在,这是DECsystem 10手册的准第二版。1978年的第一版(称为用户指南)并不包含 compare/3 也不 (@<)/2 和相关的内置功能;只有 (==)/2(\==)/2. 1982年的手册在对这一内置的定义中提到了 "标准顺序"。因此,这三个符号(在标准的领域中构成了 "标准秩序")。order)中颇有道理。 语境。该标准本身提到了7.2术语命令,通过 term_preced.

一些系统使用了 == 作为身份的象征,但改成 =. 但是,我从来没有遇到过 @< 在任何系统中。

请注意,即使在考虑带有变量甚至无限树的术语时,术语的身份也是很好定义的,而一般的术语顺序在这种情况下只是部分定义。

© www.soinside.com 2019 - 2024. All rights reserved.