lisp 里的相等(相同)的比较


common-lisp 里关于相等、相同的比较运算符太多了,怎么用呢?


eq   eql  qual  equalp  =   string-equal  char-equal 


怎么用呢?  一个大原则:  符号系统(symbol) 的比较用eq ,其他情况下可以用equal


下面看看 :

eq  只用来比较符号系统(symbol) 或者cons 但是只能跟自己比较。

CL-USER> (member 2 '(3 4 2 5 6))
(2 5 6)
CL-USER> (eq 'abc 'abc )
T
CL-USER> (eq 'abc "abc")
NIL
CL-USER> (eq 1 1)
T
CL-USER> (eq "abc" "abc")
NIL
CL-USER>

CL-USER> (eq '(1 2 3) '(1 2 3))
NIL


我们常规意义上的equal 都可以比对相等了,但是不用类型的是不能比较,例如  (equal 1 1.0)

CL-USER> (equal 'apple 'apple)
T
CL-USER> (equal "abc" "abc")
T
CL-USER> (equal 'abc "abc")
NIL
CL-USER> (equal 1 1)
T
CL-USER> (equal 1 1.0)
NIL
CL-USER> (equal '(1 2 3) '(1 2 3))
T
CL-USER> (equal (list 1 2 3) (cons 1 (cons 2 3)))
NIL
CL-USER> (equal (list 1 2 3) (cons 1 (cons 2(cons 3 nil))))
T
CL-USER> (equal #\a #\a)
T
CL-USER> (equal 2.3 2.3)
T
CL-USER>

我们常规意义上的equal 都可以比对相等了,但是不用类型的是不能比较,例如  (equal 1 1.0)



eql  可以比较  数字, 符号系统(symbol) 还有字符

CL-USER> (eql 1 1)
T
CL-USER> (eql 1.0 1)
NIL
CL-USER> (eql #\a #\a)
T
CL-USER> (eql 'abc 'abc)
T
CL-USER>


eql  也不能夸数据类型比较



equalp 可以比较很多我们看上去相等的数据,例如  1 = 1.0  “abc” = “ABC"

CL-USER> (equalp 1 1.0)
T
CL-USER> (equalp "abc" "ABC")
T
CL-USER> (equalp  'abc 'abc)
T
CL-USER> (equalp '(1 2 3) (list 1 2 3))
T
CL-USER> (equalp '(1 2 3) (cons 1(cons 2(cons 3 nil))))
T
CL-USER> (equalp 1 "1")
NIL
CL-USER> (equalp 1 #\1)
NIL

但是equalp 是不能夸" 大” 的数据类型的比如 数字1 与字符串 ”1“



字符串的比较 就 可以考虑专用的STRING-EQUAL
字符的比较 可以考虑专用的  char-equal









来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133735/viewspace-751628/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/133735/viewspace-751628/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值