【发布时间】:2016-11-11 03:32:40
【问题描述】:
我希望我的代码将结构转换为表达式,并对其求值以获得原始结构。这是我的代码:
(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)=>'((car (expr-returning d)) cdr (expr-returning d))。