2013-02-28 63 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