sicp 4.16

aa_niaofang 2014-04-23 07:06:54
代码所引用的其他部分可以在上一篇帖子中找到,这里只是贴出相关部分代码
;; procedure
(define (make-procedure parameters body env)
(list 'procedure parameters (scan-out-defines body) env))


;;;4.16 b) scan-out-defines
(define (scan-out-defines procedure-body)
(define (unassigned-define defines)
(map (lambda (x)
(list (definition-variable x) ''*unassigned*))
defines))
(define (set-defines defines)
(map (lambda (x)
(list 'set! (definition-variable x) (definition-value x)))
defines))
(define (get-defines body)
(if (pair? body)
(if (definition? (car body))
(cons (car body) (get-defines (cdr body)))
'())
'()))
(define (not-defines body)
(if (null? body)
'()
(if (pair? body)
(if (definition? (car body))
(not-defines (cdr body))
body)
'())))
(define (connect head tail)
(if (null? head)
tail
(cons (car head)
(connect (cdr head) tail))))
(if (null? (get-defines procedure-body))
procedure-body
(list (make-let (unassigned-define (get-defines procedure-body))
(list (make-begin (connect (set-defines (get-defines procedure-body))
(not-defines procedure-body))))))))
...全文
69 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧