Prolog 中的数字比较运算符与其他语言几乎相同。
| 操作员 | 意义 |
|---|---|
X > Y |
X 大于 Y |
X < Y |
X 小于 Y |
X >= Y |
X 大于或等于 Y |
X =< Y( 不是<=) |
X 小于或等于 Y |
问题:为什么 prolog 与大多数其他语言不同并且使用=<and not <=?
原因是由于此类符号是如何手写的,因此经常引用从右到左:-的含义含义的解释。<-
更新 - 编辑以纠正拼写错误
在命令式编程语言中,较小的等于字面写为<=。但在 Prolog 中,<=看起来更像是向左的箭头,因为 Prolog 经常用于实现各种定理证明器。因此,对于算术比较运算符来说,=<这是更自然的选择1 。
对于算术评估和比较来说,这只是有点麻烦,因为误用会显示为无害的语法错误。但在有限制的情况下就变得更加麻烦。SICStus 的clpfd实现同时具有#<=和#=<作为中缀运算符,分别表示含义和较小的等于,这会导致许多不必要的初学者错误。请注意,此类错误很难检测到,因为许多类似的用法对于这两种X #<= 1含义都有效。
由于这种混乱,新的实现(例如clpfdSWI 及其后继者clpz(对于 SICStus 和 Scryer))使用rather#<==和#==>作为蕴涵,因此#<=根本没有定义。
请注意,其他编程语言也必须解决此问题。最值得注意的是,Haskell 使用=>类约束,因此将箭头写在另一个方向,因为<=它已经表示比较。
1 至少自 1978 年 12 月 10 日序言起。
\n最早的使用可能是在报告 40的第 54 页的基准qsort中,DHD Warren,实现 Prolog\xe2\x80\x94Compiling Predicate Logic Programs。1977 年 5 月。
\npartition([X,..L],Y,[X,..L1],L2) :- X =< Y, !,\n partition(L,Y,L1,L2).\nRun Code Online (Sandbox Code Playgroud)\n这,..是|ISO 格式的。-符号..在 univ 中仍然存在=..。