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")