为什么 prolog 使用 =< 而不是 <=?

Pro*_*ple 3 prolog iso-prolog

Prolog 中的数字比较运算符与其他语言几乎相同。

操作员 意义
X > Y X 大于 Y
X < Y X 小于 Y
X >= Y X 大于或等于 Y
X =< Y( 不是<= X 小于或等于 Y

问题:为什么 prolog 与大多数其他语言不同并且使用=<and not <=

原因是由于此类符号是如何手写的,因此经常引用从右到左:-的含义含义的解释。<-


更新 - 编辑以纠正拼写错误

fal*_*lse 6

在命令式编程语言中,较小的等于字面写为<=。但在 Prolog 中,<=看起来更像是向左的箭头,因为 Prolog 经常用于实现各种定理证明器。因此,对于算术比较运算符来说,=<这是更自然的选择1 。

\n

对于算术评估和比较来说,这只是有点麻烦,因为误用会显示为无害的语法错误。但在有限制的情况下就变得更加麻烦。SICStus 的实现同时具有#<=#=<作为中缀运算符,分别表示含义和较小的等于,这会导致许多不必要的初学者错误。请注意,此类错误很难检测到,因为许多类似的用法对于这两种X #<= 1含义都有效。

\n

由于这种混乱,新的实现(例如clpfdSWI 及其后继者clpz(对于 SICStus 和 Scryer))使用rather#<==#==>作为蕴涵,因此#<=根本没有定义。

\n

请注意,其他编程语言也必须解决此问题。最值得注意的是,Haskell 使用=>类约束,因此将箭头写在另一个方向,因为<=它已经表示比较。

\n
\n

1 至少自 1978 年 12 月 10 日序言起。

\n

最早的使用可能是在报告 40的第 54 页的基准qsort中,DHD Warren,实现 Prolog\xe2\x80\x94Compiling Predicate Logic Programs。1977 年 5 月。

\n
partition([X,..L],Y,[X,..L1],L2) :- X =< Y, !,\n   partition(L,Y,L1,L2).\n
Run Code Online (Sandbox Code Playgroud)\n

,..|ISO 格式的。-符号..在 univ 中仍然存在=..

\n