2013-02-28 65 views
1

比较名称如何比较名称,如本例:与equals

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

回答

1

首先,您不希望名称为'(bill),该名称是由单个符号'bill组成的列表。你可能直接想要'bill。其次,您不能使用=进行符号比较:=用于数字比较。 symbol=?可能是你想要什么:(注意,还有一些其他的平等函数将在这里工作过,你可能会看到其他人代替symbol=?使用eq?equal?这里)

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

2

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

(= 1 1) 

但是,这似乎并不如此。如果name是一个符号:

(symbol=? name 'bill) 

如果name是一个字符串:

(string=? name "bill") 

如果name是单个字符:

(char=? name #\b) 

如果名称是列表:

(member name '(bill)) 

最后,如果你不知道名字的类型,你可以随时使用equal?

(equal? name "bill") 
+0

+1末尖端。你通常不会使用'equal?'去_wrong_。你可能会去_慢(比必要的慢),就是这样。例如,将两个符号与'eq?'进行比较会更快一些,但如果使用'equal?',则您的程序将正常工作。 – 2013-03-01 22:59:08