1

この場合のような名前を比較するにはどうすればよいですか:

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

?

4

2 に答える 2

2

等しいかどうかのテストに使用される手順は、比較するオペランドのタイプによって異なります。特に、この手順は数値=間の比較に使用されます。

(= 1 1)

しかし、そうではないようです。nameがシンボルの場合:

(symbol=? name 'bill)

が文字列の場合name:

(string=? name "bill")

nameが 1 文字の場合:

(char=? name #\b)

名前がリストにある場合:

(member name '(bill))

最後に、名前のタイプがわからない場合は、いつでも使用できますequal?

(equal? name "bill")
于 2013-02-28T03:56:40.533 に答える
1

'(bill)まず第一に、名前を単一のシンボルからなるリストである にしたいとは思わないでしょう'bill。あなたはおそらく'bill直接したいだけです。=第二に、シンボルの比較には使用できません:=は数値比較用です。symbol=?おそらくあなたが望むものです:

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

(ここでも機能する他の等価関数がいくつかあることに注意してください。他の人がここの代わりにeq?orを使用しているのを目にするかもしれません。)equal?symbol=?

于 2013-02-28T03:48:12.377 に答える