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

Relational operator symbols in Prolog 3-way comparison

Prolog 标准 ISO/IEC 13211-1:1995/Cor.2:2012 特征 compare/3:

8.4.2 compare/3 – three-way comparison

8.4.2.1 Description

compare(Order, X, Y) is true iff Order unifies with R which is one of the following atoms: '=' iff X and Y are identical terms (3.87), '<' iff X term_precedes Y (7.2), and '>' iff Y term_precedes X. [...]

最近,我突然意识到使用原子 <=> 有点奇怪:

恕我直言,更自然的选择是(已经)@<==@>,因为这些正是其实现由 compare/3.

确定的谓词

那么:为什么选择原子 </=/> 而不是 @</==/@>

Recently, it dawned on me that using the atoms <, =, and > is somewhat weird:

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

compare/3 自 1982 年以来作为内置文件存在,这是 DECsystem 10 手册的准第二版。 1978 年的第一个(称为用户指南)不包含 compare/3(@<)/2 和相关的内置函数;只有 (==)/2(\==)/2。 1982 年的手册在这个内置函数的定义中引用了 "standard order"。因此,这三个符号(在标准中构成域 order)在 that 上下文中非常有意义。该标准本身通过 term_precedes.

引用 7.2 术语顺序

有些系统曾使用==作为身份符号,但改为=。但是,我在任何系统中都没有遇到过@<

请注意,即使在考虑带有变量甚至无限树的项时,项的同一性也得到了很好的定义,而在这种情况下,一般的项顺序仅部分定义。