How do I compare names such as this case:
(if (= name '(bill)) (write-line '(over)))
?
用于测试相等性的过程取决于要比较的操作数的类型。特别是,该=
过程用于比较数字:
(= 1 1)
但情况似乎并非如此。如果name
是一个符号:
(symbol=? name 'bill)
如果name
是一个字符串:
(string=? name "bill")
如果name
是单个字符:
(char=? name #\b)
如果名称在列表中:
(member name '(bill))
最后,如果您不确定名称的类型,您可以随时使用equal?
:
(equal? name "bill")
首先,您不太可能希望名称为'(bill)
,这是一个由单个符号 组成的列表'bill
。你可能只是想要'bill
直接。其次,您不能=
用于符号比较:=
是用于数字比较。symbol=?
可能是你想要的:
(if (symbol=? name 'bill) ...)
(请注意,这里还有一些其他的相等函数也可以使用,您很可能会看到其他人使用eq?
或equal?
代替symbol=?
这里。)