Scheme 将名称与相等项进行比较

Scheme 将名称与相等项进行比较,scheme,racket,Scheme,Racket,如何比较名称,如本例: (if (= name '(bill)) (write-line '(over))) ?首先,您不太可能希望名称是'(bill),它是由单个符号'bill组成的列表。您可能只需要直接购买”账单。其次,不能使用=进行符号比较:=用于数字比较符号=?可能就是您想要的: (if (symbol=? name 'bill) ...) (请注意,这里还有一些其他相等函数也可以使用,您可能会看到其他人使用eq?或equal?代替symbol=?。用于测试相等性的过程取决于要比较的

如何比较名称,如本例:

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

首先,您不太可能希望名称是
'(bill)
,它是由单个符号
'bill
组成的列表。您可能只需要直接购买
”账单。其次,不能使用
=
进行符号比较:
=
用于数字比较<代码>符号=?
可能就是您想要的:

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

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

用于测试相等性的过程取决于要比较的操作数的类型。具体而言,
=
程序用于比较数字:

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

(symbol=? name 'bill)
如果
name
是字符串:

(string=? name "bill")
如果
name
是单个字符:

(char=? name #\b)
如果名称在列表中:

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

(equal? name "bill")

+1用于末端的尖端。使用
equal?
通常不会出错。你可能会走慢(比必要的慢),就是这样。例如,使用
eq?
比较两个符号会更快一些,但如果使用
equal?
,程序将正常工作。
(member name '(bill))
(equal? name "bill")