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. [...]
最近,我突然意识到使用原子 <
、=
和 >
有点奇怪:
谓词(<)/2
和(>)/2
表示算术比较。
另一方面,谓词(=)/2
是句法术语统一.
恕我直言,多更自然的选择是(已经)@<
、==
和@>
,因为这些正是其实现由 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 术语顺序
有些系统曾使用==
作为身份符号,但改为=
。但是,我在任何系统中都没有遇到过@<
请注意,即使在考虑带有变量甚至无限树的项时,项的同一性也得到了很好的定义,而在这种情况下,一般的项顺序仅部分定义。
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. [...]
最近,我突然意识到使用原子 <
、=
和 >
有点奇怪:
谓词
(<)/2
和(>)/2
表示算术比较。另一方面,谓词
(=)/2
是句法术语统一.
恕我直言,多更自然的选择是(已经)@<
、==
和@>
,因为这些正是其实现由 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.
有些系统曾使用==
作为身份符号,但改为=
。但是,我在任何系统中都没有遇到过@<
请注意,即使在考虑带有变量甚至无限树的项时,项的同一性也得到了很好的定义,而在这种情况下,一般的项顺序仅部分定义。