王垠上半生最重要的“杰作”

2016-05-21 13:03:52 +08:00
 dxcqcv

"我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在 GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星 期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当 我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了 。它蕴含的美,超越我给任何公司写的成千上万行的代码。

    ;; A simple CPS transformer which does proper tail-call and does not
    ;; duplicate contexts for if-expressions.

    ;; author: Yin Wang (yw21@cs.indiana.edu)


    (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))))

有人能解读一下这段代码吗?什么作用,精美在何处?

4098 次点击
所在节点    问与答
5 条回复
pasturn
2016-05-21 13:09:23 +08:00
曲高和寡
thinker3
2016-05-21 13:38:24 +08:00
17chai
2016-05-21 13:42:24 +08:00
jsyangwenjie
2016-05-21 13:42:43 +08:00
把 scheme 代码做 CPS 变换之后解释执行。
guoer
2016-05-21 15:00:20 +08:00
mingge 可以一战

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/280221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX