私のコードで構造体を式に転送し、それを評価して元の構造体を取得します。ここに私のコードは次のとおりです。なぜ私のスキームマクロはうまくいきませんか?
(define-syntax expr-returning (syntax-rules()
((expr-returning (car x)) '(car (expr-returning x)))
((expr-returning (cdr x)) '(cdr (expr-returning x)))
((expr-returning (cons x y)) '(cons (expr-returning x) (expr-returning y)))
((expr-returning obj) (cond [(null? obj) 'null]
[(number? obj) 'obj]
[(char? obj) 'obj]
[(boolean? obj) 'obj]
[(pair? obj) (expr-returning (cons (car obj) (cdr obj)))]
[else 'error]
))))
ここ
は私のテストで:
(define ls (append '(a e i o u) 'y))
(define d (cons ls (cdr (cdr ls))))
(define e (expr-returning d))
d
e
(eval e)
出力は私の短所と間違って何
'((a e i o u . y) i o u . y)
'(cons (expr-returning (car d1)) (expr-returning (cdr d1)))
cons: unbound identifier;
also, no #%app syntax transformer is bound in: cons
のですか?
私はDrRacketであなたの例を試してみましたが、それは動作します: '(evalのE)' => ''((カー(式expr-返すd))はCDR(式exprを返しますd)) '。 – Renzo