用等号比较名称

时间:2013-02-28 03:43:19

标签: scheme racket

如何比较此案例的名称:

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

2 个答案:

答案 0 :(得分:2)

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

(= 1 1)

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

(symbol=? name 'bill)

如果name是字符串:

(string=? name "bill")

如果name是单个字符:

(char=? name #\b)

如果名称​​在列表中:

(member name '(bill))

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

(equal? name "bill")

答案 1 :(得分:1)

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

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

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