Redian新闻
>
王垠的[40 行代码]: 普通琐男码工们都跪安吧! (转载)
avatar
王垠的[40 行代码]: 普通琐男码工们都跪安吧! (转载)# Joke - 肚皮舞运动
w*m
1
外面下着大雨,其实也就是比毛毛雨密一点,大家都惊慌失措
地往家赶,高速上到处都是车祸,堵得不像样子,我也想走,
不过转念一想,这时候去凑热闹肯定堵在路上了,还不如去熊猫
吃个晚餐再走。
avatar
H*g
2
【 以下文字转载自 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
avatar
c*o
3
去欢欢那里卸一宿算了

【在 w*****m 的大作中提到】
: 外面下着大雨,其实也就是比毛毛雨密一点,大家都惊慌失措
: 地往家赶,高速上到处都是车祸,堵得不像样子,我也想走,
: 不过转念一想,这时候去凑热闹肯定堵在路上了,还不如去熊猫
: 吃个晚餐再走。

avatar
i*a
4
看著頭暈



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

avatar
w*m
5
欢欢不是回国了吗

【在 c****o 的大作中提到】
: 去欢欢那里卸一宿算了
avatar
n*4
6
看来王哏真的是崇尚兰布达,看不起图灵的人。



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

avatar
m*s
7
上costco,两次。
上吧

【在 w*****m 的大作中提到】
: 外面下着大雨,其实也就是比毛毛雨密一点,大家都惊慌失措
: 地往家赶,高速上到处都是车祸,堵得不像样子,我也想走,
: 不过转念一想,这时候去凑热闹肯定堵在路上了,还不如去熊猫
: 吃个晚餐再走。

avatar
T*U
8
这不就是lisp?是低级语言。

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

avatar
w*m
9
他老出血,LOL

【在 m********s 的大作中提到】
: 上costco,两次。
: 上吧

avatar
t*u
10
括号越多越牛逼吗?
avatar
c*7
11
喜欢它免费试

【在 w*****m 的大作中提到】
: 他老出血,LOL
avatar
n*4
12
当然 逻辑套逻辑再套逻辑 复杂性是几何级数增长的

【在 t***u 的大作中提到】
: 括号越多越牛逼吗?
avatar
d*g
13
写的不错。断句调整一下可以出诗集了。
外面
下着大雨,
其实
也就是
比毛毛雨
密一点,
大家
都惊慌
失措,
往家赶,
高速上
到处都是
车祸,
堵得
不像样子,
我也想走,
不过
转念一想,
这时候
去凑热闹
肯定
堵在路上,
还不如
去熊猫
吃个晚餐
再走。

【在 w*****m 的大作中提到】
: 外面下着大雨,其实也就是比毛毛雨密一点,大家都惊慌失措
: 地往家赶,高速上到处都是车祸,堵得不像样子,我也想走,
: 不过转念一想,这时候去凑热闹肯定堵在路上了,还不如去熊猫
: 吃个晚餐再走。

avatar
c*n
14
对烂木大是真爱啊
这代码真能维护 真能团队协作吗。。
avatar
b*y
15
熊猫是潘大速递吗?

【在 w*****m 的大作中提到】
: 外面下着大雨,其实也就是比毛毛雨密一点,大家都惊慌失措
: 地往家赶,高速上到处都是车祸,堵得不像样子,我也想走,
: 不过转念一想,这时候去凑热闹肯定堵在路上了,还不如去熊猫
: 吃个晚餐再走。

avatar
d*f
16
增长条毛阿,你自己钻进牛角尖不代表复杂性增加好么

【在 n****4 的大作中提到】
: 当然 逻辑套逻辑再套逻辑 复杂性是几何级数增长的
avatar
w*7
17
雪妈梨花体

【在 d**********g 的大作中提到】
: 写的不错。断句调整一下可以出诗集了。
: 外面
: 下着大雨,
: 其实
: 也就是
: 比毛毛雨
: 密一点,
: 大家
: 都惊慌
: 失措,

avatar
c*w
18
谁愿意看谁看
谁愿意维护谁维护

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

avatar
w*g
19
>>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 的大作中提到】
: 谁愿意看谁看
: 谁愿意维护谁维护

avatar
n*4
20
当然增长 这就像狗下棋 每一步都是一个括弧 你不懂那是你的事

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

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

【在 T*U 的大作中提到】
: 这不就是lisp?是低级语言。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。