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
.
那么:为什么原子 <
=
>
选而不 @<
==
@>
?
最近,我发现使用原子<、=和>有些奇怪。
这个 compare/3
谓词在进入ISO Prolog Core标准之前已经存在于多个Prolog系统中。这里的选择(当时我是WG17 Core的编辑)是为了保持向后的兼容性。
compare/3
自1982年以来作为一个内置存在,这是DECsystem 10手册的准第二版。1978年的第一版(称为用户指南)并不包含 compare/3
也不 (@<)/2
和相关的内置功能;只有 (==)/2
和 (\==)/2
. 1982年的手册在对这一内置的定义中提到了 "标准顺序"。因此,这三个符号(在标准的领域中构成了 "标准秩序")。order
)中颇有道理。该 语境。该标准本身提到了7.2术语命令,通过 term_preced.
一些系统使用了 ==
作为身份的象征,但改成 =
. 但是,我从来没有遇到过 @<
在任何系统中。
请注意,即使在考虑带有变量甚至无限树的术语时,术语的身份也是很好定义的,而一般的术语顺序在这种情况下只是部分定义。