在CL中,我们有许多检查相等的运算符,这取决于数据类型:
然而,该语言有使它们通用的机制,例如Practical Common Lisp中描述的generics (defgeneric, defmethod)。我想象得很好,同样的
已经朝着这个方向做了工作:https://common-lisp.net/project/cdr/document/8/cleqcmp.html 我认为这是初学者(包括我在内)的主要挫败感,甚至是一道难题,特别是我们来自其他语言(如Python),在那里我们使用一个等号运算符(
=
,string-equal
,char=
,然后是equal
,eql
等等,对于其他数据类型也是如此,并且对于比较运算符也是一样的(编辑请不要忘记回答这些问题:)我们是否有通用的<
,>
等?我们能使它们对另一个对象起作用吗?)然而,该语言有使它们通用的机制,例如Practical Common Lisp中描述的generics (defgeneric, defmethod)。我想象得很好,同样的
==
运算符将适用于整数、字符串和字符,至少是这样!已经朝着这个方向做了工作:https://common-lisp.net/project/cdr/document/8/cleqcmp.html 我认为这是初学者(包括我在内)的主要挫败感,甚至是一道难题,特别是我们来自其他语言(如Python),在那里我们使用一个等号运算符(
==
)进行每个相等性检查(通过对象帮助在自定义类型上实现)。
我今天读到一篇博客文章(不是单子教程,很棒的系列文章),指出了这一点。那个人转向Clojure,当然还有其他原因,那里只有一个(或两个?)运算符。
那么为什么会这样呢?有什么好的理由吗?我甚至找不到第三方库,甚至在CL21上也找不到。编辑:cl21当然有这种通用运算符。
在其他SO问题中,我看到了关于性能的讨论。首先,这不适用于我将写的小代码,所以我不在乎,如果你这样认为,你有数据来支持你的观点吗?
编辑:尽管回答的语气很强硬,但似乎没有;)我们在评论中讨论。