まずは、比較のためにも変数名を見てみましょう。
> (define a (+ 1 3)) > a 4上の例では、まず a という名前の変数を定義しました。 a を評価しようとすると、その値 4 を返します。 これでは、 symbol を値として用いることが出来ません。
symbol を値として用いるためには、 ' (クォート: quote) を頭につけます。 ' の働きは、次にくる式を評価しないと言うものです。 このため、以下のように symbol を評価しないでそのまま値として用いることが出来ます。
> 'a a当然、値として symbol が用いられているときは、"+" 演算などの対象にはなりません。 以下の例の 2 つめでは、"+" が引数の値として、"a" をもらったといって怒っています。
> (+ a 3) 7 > (+ 'a 4) +: expects type <number> as 1st argument, given: a; other arguments were: 4symbol を使った program を見てみましょう。 eq? は同一性を判断する式です。 一方が symbol であった場合は、他方が同じ symbol であるときのみ #t となります。
(define (my-proper-text-color bgcolor) (cond ((eq? bgcolor 'white) 'black) ; bgcolor は変数 ((eq? bgcolor 'blue) 'white) ; (その値がシンボルだったりします) ((eq? bgcolor 'brown) 'white) ((eq? bgcolor 'red) 'black))) --- > (my-proper-text-color 'white) black > (my-proper-text-color 'blue) white
99.10.5/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp