quote続き

quoteの用途

eval の引数

gosh> (eval (quote (cons 1 2)) (scheme-report-environment 5))
(1 . 2)
gosh> (cons 1 2)
(1 . 2)

データ構造を入力する

(define x (quote (a b c)))
(car x)
a

なんとなく

gosh> (eq? (list 'a 'b) (quote (a b)))
#f
gosh> (eq? (car (list 'a 'b)) (car (quote (a b))))
#t
gosh> (eq? (cdr (list 'a 'b)) (cdr (quote (a b))))
#f

ここはまだ未消化。

quote

quoteは、文字列表現を保持していてインタプリタに評価されるとScheme Objectになる?
んー。ちがうな文字列表現ならば、car 可能なことが説明できない。
quoteはデータそのものを返す。そのものってなんだ?

仮結論

quote は Parserが返した Node* を持つ。
quoteの印字表現は Node->toSexp
quoteに対する car/cdr 操作は特別扱いする。これでやってみよう!

うごいた。

R5RSのeval には第2引数があるんですけど、現時点では省略。

;;(define xyz 3)
(display (eval (quote xyz)))

test/test.scm:215: error: unbound variable [variable: xyz]
Environment.cpp:72: debug: lookupVariableValue
(eval (quote (define-syntax p
  (syntax-rules ()
    ((_ a) (display a))))))

(p "hige")