Q
与equals
1
A
回答
1
首先,您不希望名称为'(bill)
,该名称是由单个符号'bill
组成的列表。你可能直接想要'bill
。其次,您不能使用=
进行符号比较:=
用于数字比较。 symbol=?
可能是你想要什么:(注意,还有一些其他的平等函数将在这里工作过,你可能会看到其他人代替symbol=?
使用eq?
或equal?
这里)
(if (symbol=? name 'bill) ...)
2
用于测试相等性的过程取决于要比较的操作数的类型。特别是,=
过程用于数字之间比较:
(= 1 1)
但是,这似乎并不如此。如果name
是一个符号:
(symbol=? name 'bill)
如果name
是一个字符串:
(string=? name "bill")
如果name
是单个字符:
(char=? name #\b)
如果名称是列表:
(member name '(bill))
最后,如果你不知道名字的类型,你可以随时使用equal?
:
(equal? name "bill")
+1末尖端。你通常不会使用'equal?'去_wrong_。你可能会去_慢(比必要的慢),就是这样。例如,将两个符号与'eq?'进行比较会更快一些,但如果使用'equal?',则您的程序将正常工作。 – 2013-03-01 22:59:08