1

How do I compare names such as this case:

(if (= name '(bill)) (write-line '(over)))

?

4

2 回答 2

2

用于测试相等性的过程取决于要比较的操作数的类型。特别是,该=过程用于比较数字

(= 1 1)

但情况似乎并非如此。如果name是一个符号:

(symbol=? name 'bill)

如果name是一个字符串:

(string=? name "bill")

如果name是单个字符:

(char=? name #\b)

如果名称列表中:

(member name '(bill))

最后,如果您不确定名称的类型,您可以随时使用equal?

(equal? name "bill")
于 2013-02-28T03:56:40.533 回答
1

首先,您不太可能希望名称为'(bill),这是一个由单个符号 组成的列表'bill。你可能只是想要'bill直接。其次,您不能=用于符号比较:=是用于数字比较。symbol=?可能是你想要的:

(if (symbol=? name 'bill) ...)

(请注意,这里还有一些其他的相等函数也可以使用,您很可能会看到其他人使用eq?equal?代替symbol=?这里。)

于 2013-02-28T03:48:12.377 回答