H********g 发帖数: 43926 | 1 【 以下文字转载自 Military 讨论区 】
发信人: wsnonline (卫所南次郎-哥们儿要火啦!), 信区: Military
标 题: Re: 连王垠都被P了,老中码农这行真是没得混 (转载)
发信站: BBS 未名空间站 (Thu May 11 00:34:42 2017, 美东)
据说99%的码工见了王垠的40行code之后五花大绑自惭形秽:
王垠40行代码解析
http://wineway.pw/project1/2017/04/24/1/
;; 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 |
o****p 发帖数: 9785 | 2 看不懂,这什么乱七八糟的?咱最多也就理解到perl,python的级别了,兰巴达是个啥?
【在 H********g 的大作中提到】 : 【 以下文字转载自 Military 讨论区 】 : 发信人: wsnonline (卫所南次郎-哥们儿要火啦!), 信区: Military : 标 题: Re: 连王垠都被P了,老中码农这行真是没得混 (转载) : 发信站: BBS 未名空间站 (Thu May 11 00:34:42 2017, 美东) : 据说99%的码工见了王垠的40行code之后五花大绑自惭形秽: : 王垠40行代码解析 : http://wineway.pw/project1/2017/04/24/1/ : ;; A simple CPS transformer which does proper tail-call and does not : ;; duplicate contexts for if-expressions. : ;; author: Yin Wang ([email protected]/* */)
|
y****i 发帖数: 12114 | |
G**Y 发帖数: 33224 | 4 只能说这语言不好。
可维护性太差。
要比得瑟,还有会用机器语言的呢
【在 H********g 的大作中提到】 : 【 以下文字转载自 Military 讨论区 】 : 发信人: wsnonline (卫所南次郎-哥们儿要火啦!), 信区: Military : 标 题: Re: 连王垠都被P了,老中码农这行真是没得混 (转载) : 发信站: BBS 未名空间站 (Thu May 11 00:34:42 2017, 美东) : 据说99%的码工见了王垠的40行code之后五花大绑自惭形秽: : 王垠40行代码解析 : http://wineway.pw/project1/2017/04/24/1/ : ;; A simple CPS transformer which does proper tail-call and does not : ;; duplicate contexts for if-expressions. : ;; author: Yin Wang ([email protected]/* */)
|
c******n 发帖数: 16666 | 5 老王之前那个abc女友呢 还有个艺术系的女友呢?
老王水平够高 其实就差个管着他的老婆。。。
意气用事了 冲动了 老婆可以拿着小黑屋的房贷单子摔脸 这种。。 |
c******o 发帖数: 1184 | 6 lambda还是蛮好的
python也有lambda的功能
啥?
【在 o****p 的大作中提到】 : 看不懂,这什么乱七八糟的?咱最多也就理解到perl,python的级别了,兰巴达是个啥?
|
l*****o 发帖数: 19235 | 7 看完了突然觉得程序员的经历被彻底否定了,连读都读不懂牛人的代码 |
n****4 发帖数: 12553 | 8 two questions.
what is this ?
what is it for ? |
o****p 发帖数: 9785 | 9 We don't make a living with lambda, who cares?
【在 l*****o 的大作中提到】 : 看完了突然觉得程序员的经历被彻底否定了,连读都读不懂牛人的代码
|
o****p 发帖数: 9785 | 10 真要是牛人就自己搞个啥东西出来让人崇拜一下。靠写几个别人看不懂的东西然后
whining说别人都是蠢蛋,自己最牛逼,只能让我想起祢衡来。
【在 l*****o 的大作中提到】 : 看完了突然觉得程序员的经历被彻底否定了,连读都读不懂牛人的代码
|
|
|
n****4 发帖数: 12553 | 11 以前费曼在某校有个讲座,期间,一个新手问自旋为半拉的粒子为什么要遵守费米迪拉
克统计。费曼说好的,我写个大学新生水平的讲义来解释这个事。过了几天,费曼道歉
说,对不起,我使了劲,就是没法用一年级水平的东西来说这个事,这实际上说明我们
对你这个问题还根本不懂。
【在 o****p 的大作中提到】 : 真要是牛人就自己搞个啥东西出来让人崇拜一下。靠写几个别人看不懂的东西然后 : whining说别人都是蠢蛋,自己最牛逼,只能让我想起祢衡来。
|
v***a 发帖数: 903 | |
n**n 发帖数: 626 | 13 read SICP, used to be the first programming course in MIT EECS 6001. the
book is
worth reading. although they teach python now somehow.
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-
001-structure-and-interpretation-of-computer-programs-spring-2005/ |
n**n 发帖数: 626 | 14 Yin is kind of success by doing something special
there are lots of interesting, unique guys in lisp community. reading their
blogs are quite fun, like this one
http://tianchunbinghe.blog.163.com/
https://github.com/binghe
http://weibo.com/tianchunbinghe?is_hot=1#_rnd1494567609148
"田春冰河
4月10日 17:44 来自 微博 weibo.com
[3/3] 今天是我花 2500 美元买了生平第一个正版软件(LispWorks)10 周年纪念日。
2007 年国际 Lisp 会议期间 LispWorks 罕见地史无前例地半价优惠(后来也再没有优
惠过),当时我月薪税前 5000 元,有时连饭都吃不上,笔记本电脑是公司发的,纯
32 位处理器,但我跟老板借钱买了个 64 位 Linux 版。
8203;"
I really admire this.. |
n**n 发帖数: 626 | |
n**n 发帖数: 626 | 16 LOL
楼主面临的问题很多前辈高手也遇到过,这样发展下去最终的结局有四种:
1. 学遍各种语言,发现每种语言都有缺陷,不如自己从头创造一个,所谓开宗立派,
这是 @王垠
2. 学遍各种语言,发现机器语言不过如此,兴趣转向自然语言处理、语言学乃至晦涩
艰深的梵语,所谓得义忘言,这是 @田春冰河
3. 学遍各种语言,发现语言一直在变,不变的是编辑器,之后潜心于编辑器的开发,
所谓买椟还珠,这是 @李杀
4. 学遍各种语言,发现人言纷纷,皆是红尘俗事,最终超然世外,步入空门,所谓蝉
蜕尘埃,这是 @胡正
以上四位并称中文编程界四大暗黑天王。楼主觉得哪种比较炫酷呢?
www.yinwang.org
tianchunbinghe.blog.163.com
www.xahlee.org
www.huzheng.org |
H********g 发帖数: 43926 | 17 我觉得搞语言入迷真是本末倒置。
【在 n**n 的大作中提到】 : LOL : 楼主面临的问题很多前辈高手也遇到过,这样发展下去最终的结局有四种: : 1. 学遍各种语言,发现每种语言都有缺陷,不如自己从头创造一个,所谓开宗立派, : 这是 @王垠 : 2. 学遍各种语言,发现机器语言不过如此,兴趣转向自然语言处理、语言学乃至晦涩 : 艰深的梵语,所谓得义忘言,这是 @田春冰河 : 3. 学遍各种语言,发现语言一直在变,不变的是编辑器,之后潜心于编辑器的开发, : 所谓买椟还珠,这是 @李杀 : 4. 学遍各种语言,发现人言纷纷,皆是红尘俗事,最终超然世外,步入空门,所谓蝉 : 蜕尘埃,这是 @胡正
|
N*****m 发帖数: 42603 | 18 谈不上本末倒置。SIGPLAN是ACM的一大重要分支。
【在 H********g 的大作中提到】 : 我觉得搞语言入迷真是本末倒置。
|
w*x 发帖数: 3456 | 19 胡正是写stardict的那个吗?我觉得单就这个成就他就比王垠强了
【在 n**n 的大作中提到】 : LOL : 楼主面临的问题很多前辈高手也遇到过,这样发展下去最终的结局有四种: : 1. 学遍各种语言,发现每种语言都有缺陷,不如自己从头创造一个,所谓开宗立派, : 这是 @王垠 : 2. 学遍各种语言,发现机器语言不过如此,兴趣转向自然语言处理、语言学乃至晦涩 : 艰深的梵语,所谓得义忘言,这是 @田春冰河 : 3. 学遍各种语言,发现语言一直在变,不变的是编辑器,之后潜心于编辑器的开发, : 所谓买椟还珠,这是 @李杀 : 4. 学遍各种语言,发现人言纷纷,皆是红尘俗事,最终超然世外,步入空门,所谓蝉 : 蜕尘埃,这是 @胡正
|
N*****m 发帖数: 42603 | 20 是
【在 w*x 的大作中提到】 : 胡正是写stardict的那个吗?我觉得单就这个成就他就比王垠强了
|
|
|
n****4 发帖数: 12553 | 21 那么这个胡正最后遁入空门是什么意思?
【在 N*****m 的大作中提到】 : 是
|
N*****m 发帖数: 42603 | 22 楼上都给了链接啊,你自己点进去看看就知道了
【在 n****4 的大作中提到】 : 那么这个胡正最后遁入空门是什么意思?
|
n****4 发帖数: 12553 | 23 这哥们是个神人啊
【在 N*****m 的大作中提到】 : 楼上都给了链接啊,你自己点进去看看就知道了
|
n*******0 发帖数: 2002 | 24 就是字面意思,去这位老哥的主页看看就知道了。
【在 n****4 的大作中提到】 : 那么这个胡正最后遁入空门是什么意思?
|
S*****e 发帖数: 6676 | |
a*o 发帖数: 19981 | 26 属实,沉迷于写这种看起来很牛逼的code其实没什么卵用,大project里最好的code是
逻辑清晰注释充足,新手都能看懂,易用易维护易扩展。往往看起来越牛逼的code其实
越是废柴,三五天大家看完热闹就废掉了。
: 我觉得搞语言入迷真是本末倒置。
【在 H********g 的大作中提到】 : 我觉得搞语言入迷真是本末倒置。
|
f****p 发帖数: 18483 | 27 遁入空门其实说的是个故事。有一天下大雨,可巧前一天晚上井盖被偷了,结果一脚踩
空,遁入空门也!
: 遁入空门了还整这些?
【在 S*****e 的大作中提到】 : 遁入空门了还整这些?
|
v*******x 发帖数: 108 | 28 牛人!
www.yinwang.org
tianchunbinghe.blog.163.com
www.xahlee.org
www.huzheng.org |
H********g 发帖数: 43926 | 29 我还以为是投入某老师门下修炼
【在 f****p 的大作中提到】 : 遁入空门其实说的是个故事。有一天下大雨,可巧前一天晚上井盖被偷了,结果一脚踩 : 空,遁入空门也! : : : 遁入空门了还整这些? :
|
S*****e 发帖数: 6676 | 30 卧槽,真的假的?
【在 f****p 的大作中提到】 : 遁入空门其实说的是个故事。有一天下大雨,可巧前一天晚上井盖被偷了,结果一脚踩 : 空,遁入空门也! : : : 遁入空门了还整这些? :
|