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")