两岸对抗给个网站 你们懂的还有没有人看的...PPT...

琼瑶死亡名言
名言内容:我也不知道我会写到什么时候。说不定有一天我写到一半的时候倒下去就死掉了。人们都怕谈死亡,这对我来讲是一点都不怕的。它是一条必然的路,当你生下来的时候就注定了。我自己经历过太多次生死,耳闻的、目睹的,我自己也曾经走近过死亡,太多了,所以我把这些看得很淡。我觉得人最可怕的不是死亡,最可怕的事情是“老”、“病”,你很老了如果还不断地生病,这样会拖累你的儿女。看到那些老年人已经很衰弱了,神志不清了,还苟延残喘,在病床上缠绵很久,我就会思考,我觉得安乐死是应该成立的,因为你已经没有生存的价值了,成了植物人。我现在也老了,常常听到一些老朋友过去了,我每次问的第一句话都是怎么过去的。我有一个朋友叫白景瑞,是一个导演,他去的时候是在出租车上,前几分钟他还在吃火锅,上了出租车和人家谈判谈了一半就走了,我就觉得他很幸福。我觉得死亡不是悲哀,而是死亡之前你有没有经历痛苦,如果没有经历痛苦,那就是一种幸福。
名言出自:
名言作者:琼瑶
琼瑶档案资料:原名陈,台湾女作家
推荐名人名言
本站共收录关于死亡的名言135条
不创新,就死亡。现代美国著名企业家 艾柯卡
退休是死亡的开始。 巴普洛?卡梭
放弃信念,无异死亡。
绝望是走向死亡的疾病。 吉尔凯高尔
死去何所道,托体同山阿。见晋?陶渊明《拟挽歌辞三首》其三。山阿:山陵。这两句大意是:死去有什么关系,无非寄身山陵与自然化为一体罢了。此条写诗人对生死的达观。诗人一生崇尚自然,纵浪其中,不畏不惧。在他看来,生是主观能动地与大自然交合,无论生死都在自然之中,所以死也就不值得大惊小怪了。这种轻松愉快地去迎接死亡的旷达人生观,与汉诗所表现的畏惧死亡形成了鲜明对比。同时我们也可看出诗句在旷达之中带有朴素的唯物论思想和正确认识人生的因素。东晋末期南朝宋初期诗人、文学家、辞赋家、散文家 陶渊明 《拟挽歌辞三首》
本站共收录琼瑶的名言62条
你所种植的,你必收获。
慎言谨行是修己第一事。
青山依旧在,几度夕阳红。
爱情像条狗,追不到也赶不走。
若非一番寒澈骨,哪得梅花扑鼻香?
本文地址:
推荐成语大全
琼瑶死亡名言内容:
新学网 Copyright (C)
All Rights Reserved.推荐到广播
533864 人聚集在这个小组
(CrystalY)
第三方登录:王垠的「40 行代码」真如他说的那么厉害吗?
&blockquote&&我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在 &a href=&/yinwang0/gems& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub&i class=&icon-external&&&/i&&/a& 上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想象,这样一片普通人看起来像是玩具的 40 行 &a class=& wrap external& href=&/yinwang0/lightsabers/blob/6a66c294d4c4217efebfdeae18eee/cps.ss& target=&_blank& rel=&nofollow noreferrer&&cps.ss 代码&i class=&icon-external&&&/i&&/a&,融入了我一个星期的日日夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 40 行代码了。它蕴含的美,超越我给任何公司写的成千上万行的代码。& &/blockquote&&br&有没有人来说说这个东西,我想知道他有没有说大话。&br&&br&附代码:&br&&div class=&highlight&&&pre&&code class=&language-scheme&&&span class=&c1&&;; A simple CPS transformer which does proper tail-call and does not&/span&
&span class=&c1&&;; duplicate contexts for if-expressions.&/span&
&span class=&c1&&;; author: Yin Wang (yw21@cs.indiana.edu)&/span&
&span class=&p&&(&/span&&span class=&nb&&load &/span&&span class=&s&&&pmatch.scm&&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&k&&define &/span&&span class=&nv&&cps&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&exp&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&letrec&/span&
&span class=&p&&(&/span&&span class=&err&&[&/span&&span class=&nv&&trivial?&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&nb&&memq &/span&&span class=&nv&&x&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&nv&&zero?&/span& &span class=&nv&&add1&/span& &span class=&nv&&sub1&/span&&span class=&p&&)))&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&nv&&id&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&v&/span&&span class=&p&&)&/span& &span class=&nv&&v&/span&&span class=&p&&)&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&nv&&ctx0&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&v&/span&&span class=&p&&)&/span& &span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&nf&&k&/span& &span class=&o&&,&/span&&span class=&nv&&v&/span&&span class=&p&&))&/span&&span class=&err&&]&/span&
&span class=&c1&&; tail context&/span&
&span class=&err&&[&/span&&span class=&nv&&fv&/span& &span class=&p&&(&/span&&span class=&k&&let &/span&&span class=&p&&(&/span&&span class=&err&&[&/span&&span class=&nv&&n&/span& &span class=&mi&&-1&/span&&span class=&err&&]&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&()&/span&
&span class=&p&&(&/span&&span class=&k&&set! &/span&&span class=&nv&&n&/span& &span class=&p&&(&/span&&span class=&nb&&+ &/span&&span class=&mi&&1&/span& &span class=&nv&&n&/span&&span class=&p&&))&/span&
&span class=&p&&(&/span&&span class=&nb&&string-&symbol &/span&&span class=&p&&(&/span&&span class=&nb&&string-append &/span&&span class=&s&&&v&&/span& &span class=&p&&(&/span&&span class=&nb&&number-&string &/span&&span class=&nv&&n&/span&&span class=&p&&)))))&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&nv&&cps1&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nb&&exp &/span&&span class=&nv&&ctx&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&pmatch&/span& &span class=&nv&&exp&/span&
&span class=&err&&[&/span&&span class=&o&&,&/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nf&&guard&/span& &span class=&p&&(&/span&&span class=&nb&&not &/span&&span class=&p&&(&/span&&span class=&nb&&pair? &/span&&span class=&nv&&x&/span&&span class=&p&&)))&/span& &span class=&p&&(&/span&&span class=&nf&&ctx&/span& &span class=&nv&&x&/span&&span class=&p&&)&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&o&&,&/span&&span class=&nv&&test&/span& &span class=&o&&,&/span&&span class=&nv&&conseq&/span& &span class=&o&&,&/span&&span class=&nv&&alt&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&test&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&t&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cond&/span&
&span class=&err&&[&/span&&span class=&p&&(&/span&&span class=&nb&&memq &/span&&span class=&nv&&ctx&/span& &span class=&p&&(&/span&&span class=&nb&&list &/span&&span class=&nv&&ctx0&/span& &span class=&nv&&id&/span&&span class=&p&&))&/span&
&span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&o&&,&/span&&span class=&nv&&t&/span& &span class=&o&&,&/span&&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&conseq&/span& &span class=&nv&&ctx&/span&&span class=&p&&)&/span& &span class=&o&&,&/span&&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&alt&/span& &span class=&nv&&ctx&/span&&span class=&p&&))&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&nv&&else&/span&
&span class=&p&&(&/span&&span class=&k&&let &/span&&span class=&p&&(&/span&&span class=&err&&[&/span&&span class=&nv&&u&/span& &span class=&p&&(&/span&&span class=&nf&&fv&/span&&span class=&p&&)&/span&&span class=&err&&]&/span&&span class=&p&&)&/span&
&span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&k&&let &/span&&span class=&p&&(&/span&&span class=&err&&[&/span&&span class=&nv&&k&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&u&/span&&span class=&p&&)&/span& &span class=&o&&,&/span&&span class=&p&&(&/span&&span class=&nf&&ctx&/span& &span class=&nv&&u&/span&&span class=&p&&))&/span&&span class=&err&&]&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&o&&,&/span&&span class=&nv&&t&/span& &span class=&o&&,&/span&&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&conseq&/span& &span class=&nv&&ctx0&/span&&span class=&p&&)&/span& &span class=&o&&,&/span&&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&alt&/span& &span class=&nv&&ctx0&/span&&span class=&p&&))))&/span&&span class=&err&&]&/span&&span class=&p&&)))&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&x&/span&&span class=&p&&)&/span& &span class=&o&&,&/span&&span class=&nv&&body&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&ctx&/span& &span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&x&/span& &span class=&nv&&k&/span&&span class=&p&&)&/span& &span class=&o&&,&/span&&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&body&/span& &span class=&nv&&ctx0&/span&&span class=&p&&)))&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&op&/span& &span class=&o&&,&/span&&span class=&nv&&a&/span& &span class=&o&&,&/span&&span class=&nv&&b&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&a&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&v1&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&b&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&v2&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&ctx&/span& &span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&op&/span& &span class=&o&&,&/span&&span class=&nv&&v1&/span& &span class=&o&&,&/span&&span class=&nv&&v2&/span&&span class=&p&&))))))&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&rator&/span& &span class=&o&&,&/span&&span class=&nv&&rand&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&rator&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&r&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&rand&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&d&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cond&/span&
&span class=&err&&[&/span&&span class=&p&&(&/span&&span class=&nf&&trivial?&/span& &span class=&nv&&r&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&nf&&ctx&/span& &span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&r&/span& &span class=&o&&,&/span&&span class=&nv&&d&/span&&span class=&p&&))&/span&&span class=&err&&]&/span&
&span class=&err&&[&/span&&span class=&p&&(&/span&&span class=&nb&&eq? &/span&&span class=&nv&&ctx&/span& &span class=&nv&&ctx0&/span&&span class=&p&&)&/span& &span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&r&/span& &span class=&o&&,&/span&&span class=&nv&&d&/span& &span class=&nv&&k&/span&&span class=&p&&)&/span&&span class=&err&&]&/span&
&span class=&c1&&; tail call&/span&
&span class=&err&&[&/span&&span class=&nv&&else&/span&
&span class=&p&&(&/span&&span class=&k&&let &/span&&span class=&p&&(&/span&&span class=&err&&[&/span&&span class=&nv&&u&/span& &span class=&p&&(&/span&&span class=&nf&&fv&/span&&span class=&p&&)&/span&&span class=&err&&]&/span&&span class=&p&&)&/span&
&span class=&o&&`&/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&r&/span& &span class=&o&&,&/span&&span class=&nv&&d&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&o&&,&/span&&span class=&nv&&u&/span&&span class=&p&&)&/span& &span class=&o&&,&/span&&span class=&p&&(&/span&&span class=&nf&&ctx&/span& &span class=&nv&&u&/span&&span class=&p&&))))&/span&&span class=&err&&]&/span&&span class=&p&&)))))&/span&&span class=&err&&]&/span&&span class=&p&&))&/span&&span class=&err&&]&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps1&/span& &span class=&nv&&exp&/span& &span class=&nv&&id&/span&&span class=&p&&))))&/span&
&span class=&c1&&;;; tests&/span&
&span class=&c1&&;; var&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&ss&&'x&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&nv&&x&/span&&span class=&p&&))&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&nf&&x&/span& &span class=&mi&&1&/span&&span class=&p&&)))&/span&
&span class=&c1&&;; no lambda (will generate identity functions to return to the toplevel)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&x&/span&&span class=&p&&)&/span& &span class=&nv&&a&/span& &span class=&nv&&b&/span&&span class=&p&&))&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&a&/span&&span class=&p&&)&/span& &span class=&nv&&b&/span&&span class=&p&&))&/span&
&span class=&c1&&;; if stand-alone (tail)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&x&/span&&span class=&p&&)&/span& &span class=&nv&&a&/span& &span class=&nv&&b&/span&&span class=&p&&)))&/span&
&span class=&c1&&;; if inside if-test (non-tail)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&a&/span&&span class=&p&&)&/span& &span class=&nv&&b&/span&&span class=&p&&)&/span& &span class=&nv&&c&/span& &span class=&nv&&d&/span&&span class=&p&&)))&/span&
&span class=&c1&&;; both branches are trivial, should do some more optimizations&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nb&&zero? &/span&&span class=&nv&&a&/span&&span class=&p&&)&/span& &span class=&nv&&b&/span&&span class=&p&&)&/span& &span class=&nv&&c&/span& &span class=&nv&&d&/span&&span class=&p&&)))&/span&
&span class=&c1&&;; if inside if-branch (tail)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&t&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&a&/span&&span class=&p&&)&/span& &span class=&nv&&b&/span&&span class=&p&&)&/span& &span class=&nv&&c&/span&&span class=&p&&)))&/span&
&span class=&c1&&;; if inside if-branch, but again inside another if-test (non-tail)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&t&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&a&/span&&span class=&p&&)&/span& &span class=&nv&&b&/span&&span class=&p&&)&/span& &span class=&nv&&c&/span&&span class=&p&&)&/span& &span class=&nv&&e&/span& &span class=&nv&&w&/span&&span class=&p&&)))&/span&
&span class=&c1&&;; if as operand (non-tail)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&nf&&h&/span& &span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&a&/span&&span class=&p&&)&/span& &span class=&nv&&b&/span&&span class=&p&&))))&/span&
&span class=&c1&&;; if as operator (non-tail)&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&x&/span&&span class=&p&&)&/span& &span class=&p&&((&/span&&span class=&k&&if &/span&&span class=&nv&&x&/span& &span class=&p&&(&/span&&span class=&nf&&f&/span& &span class=&nv&&g&/span&&span class=&p&&)&/span& &span class=&nv&&h&/span&&span class=&p&&)&/span& &span class=&nv&&c&/span&&span class=&p&&)))&/span&
&span class=&c1&&;; why we need more than two names&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span& &span class=&o&&'&/span&&span class=&p&&(((&/span&&span class=&nf&&f&/span& &span class=&nv&&a&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&nf&&g&/span& &span class=&nv&&b&/span&&span class=&p&&))&/span& &span class=&p&&((&/span&&span class=&nf&&f&/span& &span class=&nv&&c&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&nf&&g&/span& &span class=&nv&&d&/span&&span class=&p&&))))&/span&
&span class=&c1&&;; factorial&/span&
&span class=&p&&(&/span&&span class=&k&&define &/span&&span class=&nv&&fact-cps&/span&
&span class=&p&&(&/span&&span class=&nf&&cps&/span&
&span class=&o&&'&/span&&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&n&/span&&span class=&p&&)&/span&
&span class=&p&&((&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&fact&/span&&span class=&p&&)&/span&
&span class=&p&&((&/span&&span class=&nf&&fact&/span& &span class=&nv&&fact&/span&&span class=&p&&)&/span& &span class=&nv&&n&/span&&span class=&p&&))&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&fact&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&n&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&k&&if &/span&&span class=&p&&(&/span&&span class=&nb&&zero? &/span&&span class=&nv&&n&/span&&span class=&p&&)&/span&
&span class=&mi&&1&/span&
&span class=&p&&(&/span&&span class=&nb&&* &/span&&span class=&nv&&n&/span& &span class=&p&&((&/span&&span class=&nf&&fact&/span& &span class=&nv&&fact&/span&&span class=&p&&)&/span& &span class=&p&&(&/span&&span class=&nf&&sub1&/span& &span class=&nv&&n&/span&&span class=&p&&))))))))))&/span&
&span class=&c1&&;; print out CPSed function&/span&
&span class=&p&&(&/span&&span class=&nf&&pretty-print&/span& &span class=&nv&&fact-cps&/span&&span class=&p&&)&/span&
&span class=&c1&&;; =&&/span&
&span class=&c1&&;; '(lambda (n k)&/span&
&span class=&c1&&;;
((lambda (fact k) (fact fact (lambda (v0) (v0 n k))))&/span&
&span class=&c1&&;;
(lambda (fact k)&/span&
&span class=&c1&&;;
&span class=&c1&&;;
(lambda (n k)&/span&
&span class=&c1&&;;
(if (zero? n)&/span&
&span class=&c1&&;;
(k 1)&/span&
&span class=&c1&&;;
(fact&/span&
&span class=&c1&&;;
fact&/span&
&span class=&c1&&;;
(lambda (v1) (v1 (sub1 n) (lambda (v2) (k (* n v2))))))))))&/span&
&span class=&c1&&;;
k))&/span&
&span class=&p&&((&/span&&span class=&nb&&eval &/span&&span class=&nv&&fact-cps&/span&&span class=&p&&)&/span& &span class=&mi&&5&/span& &span class=&p&&(&/span&&span class=&k&&lambda &/span&&span class=&p&&(&/span&&span class=&nf&&v&/span&&span class=&p&&)&/span& &span class=&nv&&v&/span&&span class=&p&&))&/span&
&span class=&c1&&;; =& 120&/span&
&/code&&/pre&&/div&
"我有什么资格说话呢?如果你要了解我的本事,真的很简单:我最精要的代码都放在
上了。但是除非接受过专门的训练,你绝对不会理解它们的价值。你会很难想象,这样一片普通人看起来像是玩具的 40 行 ,融入了我一个星期的日日夜夜的心血,数以几十计的推翻重写。这段代码,曾经耗费了一些顶尖专家十多年的研究。一个教授告诉我,光是想看懂他们的论文就需要不止一个月。而它却被我在一个星期之内闷头写出来了。我是在说大话吗?代码就摆在那里,自己去看看不就知道了。当我死后,如果有人想要知道什么是我上半生最重要的“杰作”,也就是这 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)
([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)))))]
(lambda (exp ctx)
(pmatch exp
[,x (guard (not (pair? x))) (ctx x)]
[(if ,test ,conseq ,alt)
(cps1 test
(lambda (t)
[(memq ctx (list ctx0 id))
`(if ,t ,(cps1 conseq ctx) ,(cps1 alt ctx))]
(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…
按投票排序
这一段代码和 Danvy & Filinski 那篇文(,)里的如出一辙。你去把论文读完,就能看懂了。论文可不是单丢一段代码就跑的,里面有详尽的说明,以及最重要的,思考的过程。ps. 后来 Danvy 又写了一篇文叫 Back to Direct Style,然后 Sabry 把他两篇文的技术组合到了一起,发明了 A Normal Form……pps. 在「理解技术最好去看原始论文」这点上,我是认同王某人的。
王垠 cps.ss
explained:1.
背景知识CPS:
Continuation-Passing Style.
有一篇介绍 CPS 通俗易懂的()。简单来讲,CPS 是一种编程风格:Javascript:(原味)function foo(x) {
}(CPS)function cps_foo(x, return_point) {
return return_point (x) ; }CPS 多了一个参数 return_point,return_point 来自 caller ,是 caller 所在的“世界”,caller 将这个“世界” 传递给 callee (cps_foo),这样 cps_foo 就无须利用额外的工具(比如堆栈)去查询 caller 的世界在哪里,以便返回,而是直接进入这个世界:return_point (x)。
这便是 CPS 的初衷 —— 去掉层层嵌套的世界。行话讲就是 desugar(脱糖)。Syntax sugar
是为了方便人类的表达和理解,给编程语言的核心套上的一层好吃好看的外衣,而对机器对程序的解释,需要将其还原到最本质的结构,以便机械化处理和优化,这
就是。以函数式编程的观点来看,return_point 是一个函数,以 C 观点来看,你可以把它理解为程序地址,或者,以 Matrix 来看,它是 key-maker 打开门进入新世界的那把钥匙。“世界”上只有一个巨大的程序(比如,你的程序不过是在 chrome 里面运行的一个小程序,而 chrome 又是在 OS 里面的一个小程序),return_point 将各种小程序窜连起来了。恩,差不多就是这个意思。只不过,在函数式程序里面(比如Scheme)里面,return_point 是函数,而在过程式程序(比如C)里面它更像是 0x4f36a0c4。这段 40 多行代码是给 Scheme 程序脱糖的程序,属于解释器的代码,而不是应用代码。对其的客观评价显然只有设计解释器的人才能给出。对应用程序员的意义在于,发现每天上班时编写的代码多么无聊,此外并没有任何实用价值。2.
运行结果'x'(lambda (x k) (k x))'(lambda (x k) (x 1 k))'(f x (lambda (v0) (if v0 a b)))'(if x (f a (lambda (v0) v0)) b)'(lambda (x k) (f x (lambda (v0) (if v0 (k a) (k b)))))'(lambda (x k) (let ((k (lambda (v0) (if v0 (k c) (k d))))) (if x (f a k) (k b))))'(lambda (x k) (let ((k (lambda (v0) (if v0 (k c) (k d))))) (if x (k (zero? a)) (k b))))'(lambda (x k) (if t (if x (f a k) (k b)) (k c)))'(lambda (x k) (let ((k (lambda (v0) (if v0 (k e) (k w))))) (if t (if x (f a k) (k b)) (k c))))'(lambda (x k) (let ((k (lambda (v0) (h v0 k)))) (if x (f a k) (k b))))'(lambda (x k) (let ((k (lambda (v0) (v0 c k)))) (if x (f g k) (k h))))'(f
a (lambda (v0) (g b (lambda (v1) (v0 v1 (lambda (v2) (f c (lambda (v3)
(g d (lambda (v4) (v3 v4 (lambda (v5) (v2 v5 (lambda (v6)
v6))))))))))))))'(lambda (n k)
((lambda (fact k) (fact fact (lambda (v0) (v0 n k))))
(lambda (fact k)
(lambda (n k)
(if (zero? n)
(lambda (v1) (v1 (sub1 n) (lambda (v2) (k (* n v2))))))))))
k))120原代码中最后一句 ((eval fact-cps ) 5 (lambda (v) v))
在 racket 中要修改为:((eval fact-cps (make-base-namespace)) 5 (lambda (v) v)) 才能通过算得 120。3. 注释4. 要点ctx:
函数在执行(apply)时候的上下文环境,可理解为 C 程序中运行时的栈。整
个 cps 的(主要)过程就是 if 分支在不断制造新的 ctx, 而 apply 分支(最后一个分支)不断在新的 ctx 中 '计算'
(实际上是生成 cps 函数的代码,而不是真的计算),并返回结果(到上一层 ctx)的过程。这个过程就是 scheme 的基本
eval-apply 过程。(参见SICP第四章)这是一个解释器(解释成为 CPS 风格的代码),同时也是一个CPS转换器,正所谓 Compiling with Continuations. 另外,Scheme 这种代码即数据(字符串列表)的特性,使得编写生成代码的代码相对容易和简洁。至于代码为何有 k 这个命名。呵呵,你可以叫它
kontinuation 或者
klosure. 5. 结论以自然语言写作比喻,编写自解释器级别的代码,就像你在写一本小说,而小说的主角也在写一本小说,这位主角在描写你,对你的刻画会影响到你,你受到影响之后又会改变小说中的主角,从而影响到他对你的描写。你俩要相安无事,情节合符逻辑地发展,直到最后圆满的结尾。这比写一本普通小说可难多了。Amazing & Fun !
谢谢邀请。我不算很熟悉Scheme,只能勉力为之。我知道我的解读也许有错,我也邀请了我熟悉的朋友来回答。他比我懂得更全,应该有帮助。=== 07/29/2013 更新 ===当事人到场了。我毕竟是个业余搞函数式编程的。大家还是不要看我这里,看 的原版解释吧。===================我大概读过这段代码:。简单地说,这段代码做了两件事,一件事是CPS,也就是自动尾递归,第二件事则是用Scheme语言写了一个Scheme的解释器。通过他给出的cps函数,我可以用Scheme这个语言的符号系统重新定义所有Scheme的关键字,并执行正确的程序语义。换言之,它可以让这个语言自己解释自己。本质上,他的代码是在模仿当初 John McCarthy 发明 Lisp 语言时给出的代码,但用了Scheme风格重写了一遍。这段代码里有一些相当有技巧性的部分。主要是那个cps1函数。我承认我也没有完全看懂,但大概能理解它在保持语义的同时基本做到了语言元素的最小化。他的代吗的31行和37行就是最关键的部分,实现了条件分支和递归调用。基本的原理并不复杂,主要是利用了Scheme的列表解构拆解元素,最终落实到条件分支和函数调用。如果说得更Scheme风格一点,这个cps函数就是一个自己实现的eval函数。当然是简化了一些,没有实现一些更夸张的功能,比如call-with-current-continuation。注:这个cps的实现中只包含了很少的几个语言特性:定义常量,定义函数,分支(if)和递归。这是满足一个有意义的最小化描述必需的。如果任意引入语言元素,比如while,循环,则可能就会出现语言元素爆炸的情况,陷入无限自证的逻辑怪圈里去。对这段代码,我自己的建议是,大家可以不必太在乎王垠的宣言。能写出这段代码的人,无疑非常熟悉符号推理的一般规则,也具备相当深厚的数学功底,一般人确实是写不出来。这也符合我对王垠学识的印象。但我也得说,这段代码对多数工程师而言并没有实际价值。不懂也无妨。======对不熟悉编译原理和符号推理的朋友们来说,这里可能需要一些额外的说明。请参见下方。在编译原理的世界里,自举是一个很重要的话题。一个很经典的例子:GCC语言的编译器是C语言写的,但第一个GCC编译器是用另一个编译器编译的;那么顺着这个根源向下跟踪,我们迟早必须回答这个问题,即世界上第一个编译器是什么语言写的——答案是汇编。那么这样下去,我们最终发现,任何程序设计语言都不能完全用自己描述自己。从工程角度上说,这个问题倒不影响什么。但是从数学角度上看,这个缺陷则让很多人头疼不已,因为它破坏了所谓数学的「美」的原则。这里的「美」,实际的含义是自解释。很多符号逻辑研究者都热衷于找到一种符号体系,能够使用有限的符号系统描述自身。只要找到了这一点,整个解释器的设计可以成为一个自己证明自己的,封闭的体系。喜欢浪漫的文科朋友们可能会记得希腊神话中的乌洛波洛斯,一条首尾相连象征无穷无尽的蛇。是的,所谓自举就是符号推演世界的乌洛波洛斯,一种纯粹的数学上的和谐和优雅。可惜对我这个哥德尔定理的信徒而言,这种数学上的美是毫无价值的东西。因为在我的逻辑体系里,这个世界里没有可以自证自身的公理体系。大概就是这样。
王垠前几天在 blog 里关于 P != NP 问题的一些观点:我早期对算法的研究告诉我一个经验,如果花了很多功夫,仍然找不到一个简单而快速的多项式算法,那么快速的多项式算法往往不存在。当然,你可以花更多功夫,经过长篇累牍的证明各种上限下限,找到很复杂的多项式算法,但是这些算法的实际效率,往往还不如很简单的指数时间算法。同样,作为非 researcher 但是已经以 coding 为生这么多年的人来说。如果有一个计算机领域的东西,别人还告诉你必须经过「很特殊的训练」才能体会(而且仅仅是体会,还谈不上完全理解或者批评)它的价值,那么它的价值 …… 往往 ……
别邀请了,也别赞同,这代码不是一般人看的,本身他用的语言就是极客向的语言,而且这搞的又是很专业的东西,主要是与解释器相关的领域。CPS的功能是很明确的,但其价值只有对编译器解释器很有研究的人才能判定。王垠明确说了:除非接受过专门的训练,你绝对不会理解它们的价值我没有接受过他那个专门的训练,但光看代码的话,美感与精巧是存在的。至于他是不是在说大话,这个不重要,因为每个人都可以有自己的最得意的杰作,如果这是他自己最得意的杰作,代表了这是他自己的最高水平。——很多男人同样说过类似的话:我儿子是我这半辈子最得意的杰作。——所以,杰作这东西,人人都可以有,而且我相信每个人都是真心认同自己的杰作的,这就够了。
王垠这个人挺不错的,楼主何不钻研他的代码,而不是钻研他说话的语气与用词
隔行如隔山,除非是在那个领域有点造诣的人。不懂js的人,就算是简单的js代码也看不懂的。
很多人看不懂不代表没有人看得懂。
如果要科普,请先看这里:然后指出,在编程里,递归很容易带来副作用,即结果依赖于再次对自身的调用,这需要等待,等待需要额外空间。也就是栈。太多的数据在栈上就会溢出。一种好的方法是,尾递归。所谓尾递归就是把对自身的调用放到方法的最后面。这意味着调用变成了一个类似链表的形式,每次调用的结果立刻用作下次调用的参数,而不会“等待”,从而节省栈上的空间。最后,这段代码的功能是自动把普通递归转换为尾递归。别赞同。------贴篇简单容易懂的东东:
我有一个原则,任何我看不懂的代码,我都会让作者拿回去重写
如果你看不到这里的美,你为什么还要留在这里?
隔行如隔山,我也看不懂他写的程序到底有多牛,但是我有99.9%的把握说,以下2本书中任意挑出一个40行的结论,都比王垠的这40行代码要牛上10倍。我看懂了以下2本书中的大部分,(我相信在这里回答问题的人也能看懂),但绝没有看到写这些结论的人有多少自我夸耀的地方。
再回复:不少人质疑我是否能看懂。说是看懂再说。我看不懂,因为我没学过。我也可以列出一大堆大家看不懂内容。做的事情多了,你就会发现:大道至简,真正的积淀都是初看易懂,细想有深度。再宏大再复杂的项目,都必须一句话能讲明白。阿里这么大的帝国,他也必须归约成一句:让天下没有难做的生意。谷歌这么大的帝国,你也能够整理成一句:整合信息,让人人皆可访问并受益。你去理他们的每一个核心点,都能够整出一句直达要点的话。谷歌的核心技术rank,可以归为一句:”引用数为王“。阿里的核心商业模式,可以归为一句:”生态搭台,流量唱戏“我们所创造的一切都是为了他人,需要容易理解,并有明显的受益点。不讲功效,以复杂不容易理解为卖点,除了炫技的幼稚者和有企图的骗子还有别的吗?============================================================真佩服他这种忽悠能力。在同花顺的时候,我也写过一个压缩算法,这个算法作为核心技术写在同花顺上市的招股书上。性能和效率都远超之前使用的国际压缩算法。算法反复重构之后,最后的核心的代码只有三行。这些东西研究出来的过程很精彩,但说破了,有时候和魔术一样,马上就引不起大家兴趣了。------------------------------------------------------------------------------------------------------------------------招投书中的内容 :链接来源
3、核心技术的主要内容及应用
1、压缩:以15年行业经
验为基础,依据金融数据
专用压缩算法实现的高
效压缩;比普通压缩算法提高2-3倍的压缩率;(这个有点吹牛了)链接出处
上面说的七项核心技术,四项和我相关。1、高性能大并发中,排第一的压缩及相关的通讯协议是我一个人做的。2、三网合一中两网是我带队做的3、认证体系最早是我下面的成员做的,后移交出去的。4、手机那块。全部是我带队做的,其中架构都是我设计的,代码也有近半是我做的。
之前从来没有听说过他,今天百度的时候无意间看到,特地去github看到了这段代码。大概研究了一下,发现是在尝试自举。代码的作用很简单,能够自动尾递归,简单来讲就是自动加上回调函数。主要用于代码解释器,对一般的程序员无任何意义,除非你的工作是开发一门新的语言,或者用js写一个js的解释器。而这段代码本身的逻辑非常巧妙,非常非常的巧妙(不要觉得我low啦,这是发自内心的感叹。)看懂和创造是两个完全不同的概念,再次发表感慨。我本来以为我就是世界上最牛逼的存在了,奈何人外有人啊!!!!希望3年后我能超越他两年前的水平!!!!
这个东西的确要那么一些训练才能看懂和体会。至少首先要看一本叫sicp的课程洗洗脑,然后到wiki了解下continuation和cps这东西是什么…难的在于训练一般计算机学生的思维方式(以sicp作教材的某国外名校cs毕业生或许可以除外)…其实我没仔细看过这段……不过我相信搞这个的人是会牛逼的,因为他们真的热爱编程。反正我暂时没耐心搞懂过。惭愧……
回答嘛 字里行间都有那种,有什么了不起的酸
首先我也不懂,因为我不懂各种表达式的CPS形式是什么样子。这段代码正好可以用来学习什么是CPS(因为这段本来就是在怎么做CPS)。楼主不妨自己多试试着个程序。给它一些输入,看看输出是怎样的。在有了什么是CPS的概念之后,应该就能多少理解这个程序里每个分支判断是在干什么了。
单从7天转换到10年创造这个时间差距完成源代码转换!这也是不小的工作量,天才般的头脑胜过大多数人,但还是要佐证开创性的工作!

我要回帖

更多关于 给个网站 你们懂的 的文章

 

随机推荐