由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Joke版 - 王垠的[40 行代码]: 普通琐男码工们都跪安吧! (转载)
相关主题
Re: 连王垠都被P了,老中码农这行真是没得混 (转载)王垠: 图灵的光环 (转载)
女生怎样找到好BF(本文同样也适合gg找mm……)王垠:未来计划 (转载)
女生怎样找到好BF(本文同样也适合gg找mm……) (转载)Taking Rat Tail To Whole New Level! (ZZ)
2005 TOYOTA CAMRY XLE, in GREAT condition (转载)台湾同胞买不上房,CCTV这心都快操碎了 (转载)
美国最舒服的机场是旧金山SFO车祸,害人啊!
微薄段子让宝宝爬
情人节 白人女友给我写的情书Fun Facts
一个星期写了十行代码考考眼力 (转载)
相关话题的讨论汇总
话题: lambda话题: cps话题: cps1话题: ctx话题: fact
进入Joke版参与讨论
1 (共1页)
H********g
发帖数: 43926
1
【 以下文字转载自 Military 讨论区 】
发信人: wsnonline (卫所南次郎-哥们儿要火啦!), 信区: Military
标 题: 王垠的[40 行代码]: 普通琐男码工们都跪安吧!
发信站: BBS 未名空间站 (Thu May 19 01:59:08 2016, 美东)
https://www.zhihu.com/question/20822815
"我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
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 ([email protected]/* */)
(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))))
;;; tests
;; var
(cps 'x)
(cps '(lambda (x) x))
(cps '(lambda (x) (x 1)))
;; no lambda (will generate identity functions to return to the toplevel)
(cps '(if (f x) a b))
(cps '(if x (f a) b))
;; if stand-alone (tail)
(cps '(lambda (x) (if (f x) a b)))
;; if inside if-test (non-tail)
(cps '(lambda (x) (if (if x (f a) b) c d)))
;; both branches are trivial, should do some more optimizations
(cps '(lambda (x) (if (if x (zero? a) b) c d)))
;; if inside if-branch (tail)
(cps '(lambda (x) (if t (if x (f a) b) c)))
;; if inside if-branch, but again inside another if-test (non-tail)
(cps '(lambda (x) (if (if t (if x (f a) b) c) e w)))
;; if as operand (non-tail)
(cps '(lambda (x) (h (if x (f a) b))))
;; if as operator (non-tail)
(cps '(lambda (x) ((if x (f g) h) c)))
;; why we need more than two names
(cps '(((f a) (g b)) ((f c) (g d))))
;; factorial
(define fact-cps
(cps
'(lambda (n)
((lambda (fact)
((fact fact) n))
(lambda (fact)
(lambda (n)
(if (zero? n)
1
(* n ((fact fact) (sub1 n))))))))))
;; print out CPSed function
(pretty-print fact-cps)
;; =>
;; '(lambda (n k)
;; ((lambda (fact k) (fact fact (lambda (v0) (v0 n k))))
;; (lambda (fact k)
;; (k
;; (lambda (n k)
;; (if (zero? n)
;; (k 1)
;; (fact
;; fact
;; (lambda (v1) (v1 (sub1 n) (lambda (v2) (k (* n v2))))))))))
;; k))
((eval fact-cps) 5 (lambda (v) v))
;; => 120
i****a
发帖数: 36252
2
看著頭暈



【在 H********g 的大作中提到】
: 【 以下文字转载自 Military 讨论区 】
: 发信人: wsnonline (卫所南次郎-哥们儿要火啦!), 信区: Military
: 标 题: 王垠的[40 行代码]: 普通琐男码工们都跪安吧!
: 发信站: BBS 未名空间站 (Thu May 19 01:59:08 2016, 美东)
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星

n****4
发帖数: 12553
3
看来王哏真的是崇尚兰布达,看不起图灵的人。



【在 H********g 的大作中提到】
: 【 以下文字转载自 Military 讨论区 】
: 发信人: wsnonline (卫所南次郎-哥们儿要火啦!), 信区: Military
: 标 题: 王垠的[40 行代码]: 普通琐男码工们都跪安吧!
: 发信站: BBS 未名空间站 (Thu May 19 01:59:08 2016, 美东)
: https://www.zhihu.com/question/20822815
: "我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
: GitHub 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想
: 象,这样一片普通人看起来像是玩具的 40 行 cps.ss 代码,融入了我一个星期的日日
: 夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研
: 究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星

T*U
发帖数: 22634
4
这不就是lisp?是低级语言。

【在 n****4 的大作中提到】
: 看来王哏真的是崇尚兰布达,看不起图灵的人。
:
: 在

t***u
发帖数: 20182
5
括号越多越牛逼吗?
n****4
发帖数: 12553
6
当然 逻辑套逻辑再套逻辑 复杂性是几何级数增长的

【在 t***u 的大作中提到】
: 括号越多越牛逼吗?
c******n
发帖数: 16666
7
对烂木大是真爱啊
这代码真能维护 真能团队协作吗。。
d********f
发帖数: 43471
8
增长条毛阿,你自己钻进牛角尖不代表复杂性增加好么

【在 n****4 的大作中提到】
: 当然 逻辑套逻辑再套逻辑 复杂性是几何级数增长的
c********w
发帖数: 2438
9
谁愿意看谁看
谁愿意维护谁维护

【在 c******n 的大作中提到】
: 对烂木大是真爱啊
: 这代码真能维护 真能团队协作吗。。

w*****g
发帖数: 16352
10
>>import this
>>Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

★ 发自iPhone App: ChineseWeb 11

【在 c********w 的大作中提到】
: 谁愿意看谁看
: 谁愿意维护谁维护

n****4
发帖数: 12553
11
当然增长 这就像狗下棋 每一步都是一个括弧 你不懂那是你的事

【在 d********f 的大作中提到】
: 增长条毛阿,你自己钻进牛角尖不代表复杂性增加好么
n****4
发帖数: 12553
12
梨花不怨柳絮才
三月春深只半开
括弧沉沉掩逻辑
十万图灵归去来

【在 n****4 的大作中提到】
: 当然增长 这就像狗下棋 每一步都是一个括弧 你不懂那是你的事
r****z
发帖数: 12020
13
语言的高级低级和水平的高级低级是两回事吧

【在 T*U 的大作中提到】
: 这不就是lisp?是低级语言。
1 (共1页)
进入Joke版参与讨论
相关主题
考考眼力 (转载)美国最舒服的机场是旧金山SFO
打黑的,胆要够肥微薄段子
借人气求文章下载情人节 白人女友给我写的情书
wsn买honda的中英文广告 (转载)一个星期写了十行代码
Re: 连王垠都被P了,老中码农这行真是没得混 (转载)王垠: 图灵的光环 (转载)
女生怎样找到好BF(本文同样也适合gg找mm……)王垠:未来计划 (转载)
女生怎样找到好BF(本文同样也适合gg找mm……) (转载)Taking Rat Tail To Whole New Level! (ZZ)
2005 TOYOTA CAMRY XLE, in GREAT condition (转载)台湾同胞买不上房,CCTV这心都快操碎了 (转载)
相关话题的讨论汇总
话题: lambda话题: cps话题: cps1话题: ctx话题: fact