王垠 java,王垠,40行代码,JAVA吧的大神怎么评论?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

(load "pmatch.scm")

(define cps

(lambda (exp)

(letrec

([trivial? (lambda (x) (memq x '(zero? add1 sub1)))]

[id (lambda (v) v)]

[ctx0 (lambda (v) `(k ,v))] ; tail context

[fv (let ([n -1])

(lambda ()

(set! n (+ 1 n))

(string->symbol (string-append "v" (number->string n)))))]

[cps1

(lambda (exp ctx)

(pmatch exp

[,x (guard (not (pair? x))) (ctx x)]

[(if ,test ,conseq ,alt)

(cps1 test

(lambda (t)

(cond [(memq ctx (list ctx0 id)) `(if ,t ,(cps1 conseq ctx) ,(cps1 alt ctx))]

[else

(let ([u (fv)])

`(let ([k (lambda (,u) ,(ctx u))])

(if ,t ,(cps1 conseq ctx0) ,(cps1 alt ctx0))))])))]

[(lambda (,x) ,body)

(ctx `(lambda (,x k) ,(cps1 body ctx0)))]

[(,op ,a ,b)

(cps1 a (lambda (v1)

(cps1 b (lambda (v2)

(ctx `(,op ,v1 ,v2))))))]

[(,rator ,rand)

(cps1 rator

(lambda (r)

(cps1 rand

(lambda (d)

(cond

[(trivial? r) (ctx `(,r ,d))]

[(eq? ctx ctx0) `(,r ,d k)] ; tail call

[else

(let ([u (fv)])

`(,r ,d (lambda (,u) ,(ctx u))))])))))]))])

(cps1 exp id))))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值