この場合のような名前を比較するにはどうすればよいですか:
(if (= name '(bill)) (write-line '(over)))
?
等しいかどうかのテストに使用される手順は、比較するオペランドのタイプによって異なります。特に、この手順は数値=
間の比較に使用されます。
(= 1 1)
しかし、そうではないようです。name
がシンボルの場合:
(symbol=? name 'bill)
が文字列の場合name
:
(string=? name "bill")
name
が 1 文字の場合:
(char=? name #\b)
名前がリストにある場合:
(member name '(bill))
最後に、名前のタイプがわからない場合は、いつでも使用できますequal?
。
(equal? name "bill")
'(bill)
まず第一に、名前を単一のシンボルからなるリストである にしたいとは思わないでしょう'bill
。あなたはおそらく'bill
直接したいだけです。=
第二に、シンボルの比較には使用できません:=
は数値比較用です。symbol=?
おそらくあなたが望むものです:
(if (symbol=? name 'bill) ...)
(ここでも機能する他の等価関数がいくつかあることに注意してください。他の人がここの代わりにeq?
orを使用しているのを目にするかもしれません。)equal?
symbol=?