【发布时间】:2016-10-19 09:10:32
【问题描述】:
对于一个大学项目,我们正在制定学习计划,但是我们却陷入了一项知识匮乏的艰巨任务。我们被赋予了某些函数,例如“'let”、“'cond”、“and'”等,并被要求添加宏。
(define eval
(λ (e env)
(cond ((symbol? e) (lookup-var e env))
((not (list? e)) e) ; non-list non-symbol is self evaluatory
;; special forms go here:
((equal? (car e) 'λ) ; (λ VARS BODY)
(let ((vars (cadr e)) (body (caddr e)))
(list '%closure vars body env)))
((equal? (car e) 'if)
(eval_ (if (eval_ (cadr e) env) (caddr e) (cadddr e)) env))
((equal? (car e) 'quote) (cadr e))
;; Add More Macros Here:
;; ((equal? (car e) 'let) xxx)
;;((equal? (car e) 'cond) xxx)
;;((equal? (car e) 'and) xxx)
;((equal? (car e) 'or) xxx)
(else (let ((eeoe (map (λ (e0) (eval_ e0 env)) e)))
(apply_ (car eeoe) (cdr eeoe)))))))
所以基本上我们被要求填写空白,';;' cmets是。 我尝试做'cond部分并得到了这个
((equal? (car e) 'cond)
(env (cdr e) env))
但我不知道它是否正确(对方案知之甚少)。任何帮助弄清楚这一点将不胜感激。谢谢。
【问题讨论】: