如果我想比较两个值是否相等,有多种选择,例如:
-
eq
对于符号
-
=
对于数字
-
char-equal
对于角色
-
string-equal
对于字符串
-
eql
用于符号、数字和字符串
-
equal
对于除符号之外的所有内容
- …
(我希望到目前为止我做对了。)
现在,作为 Lisp 初学者,我的问题是:为什么会这样?这只是出于“历史原因”还是拥有所有这些可能性确实有好处?
我知道why-问题总是很难回答,并且可能是基于意见的,但我认为(猜测)高级 Lisp 开发人员普遍同意一些最佳实践。
之所以有这么多,是因为有专门针对某些类型进行优化的比较函数。使用它们可能会给您带来更好的性能。
我读过的这个简单规则口齿不清之地
- Use
eq
比较识别相同的对象(指针相等)
- Use
equal
对于所有看起来一样的东西
现在有时你想测试一个字符串是否相等,不区分大小写,然后equal
不会这样做,因为“test”和“TEST”看起来不一样。string-equal
将是正确的选择。
当比较不同类型的数字时,例如 3.0 和 3,它们看起来并不相同。但是如果你这样做(= 3 3.0)
it's T
因为如果 fixnum 被转换为浮点数,它们代表相同的值。
Also equalp
就好像equal
除了它不区分字符串大小写和数字之类的=
。我不完全确定,但在我看来第三条规则是:
因此,仅使用这 3 个通用的就可以取得很大的成果,但在某些情况下您可能需要搜索CLHS对于专门的相等运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)