chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

王垠的40行代碼是什么_王垠40行代碼專家解讀

汽車玩家 ? 來(lái)源:電子發(fā)燒友網(wǎng) ? 2018-04-11 18:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

王垠

王垠[yín],四川大學(xué)97級(jí)本科畢業(yè),保送到清華大學(xué)計(jì)算機(jī)系直博。期間曾在清華大學(xué)計(jì)算機(jī)系軟件工程專業(yè)就讀,主要進(jìn)行集成電路布線算法的研究。在此期間,他因《完全用GNU/Linux工作》一文和對(duì)TeX的推廣等“非研究成果的業(yè)余東西”而出名。 在只剩一年就要博士畢業(yè)的時(shí)候,他申請(qǐng)退學(xué),并將1萬(wàn)7千余字的“退學(xué)申請(qǐng)書”(題為清華夢(mèng)的粉碎)公布在網(wǎng)上,引起輿論界一時(shí)對(duì)教育體制、理想主義等的熱議。

王垠的40行代碼

王垠的40行代碼是什么_王垠40行代碼專家解讀
王垠的40行代碼是什么_王垠40行代碼專家解讀
王垠的40行代碼是什么_王垠40行代碼專家解讀

40行代碼專家解讀

1. 背景知識(shí)

CPS: Continuation-Passing Style. 有一篇介紹 CPS 通俗易懂的文章(中文翻譯)。

簡(jiǎn)單來(lái)講,CPS 是一種編程風(fēng)格:

Javascript:

(原味)

function foo(x) {

return x ;

}

(CPS)

function cps_foo(x, return_point) {

return return_point (x) ;

}

CPS 多了一個(gè)參數(shù) return_point,return_point 來(lái)自 caller ,是 caller 所在的“世界”,caller 將這個(gè)“世界” 傳遞給 callee (cps_foo),這樣 cps_foo 就無(wú)須利用額外的工具(比如堆棧)去查詢 caller 的世界在哪里,以便返回,而是直接進(jìn)入這個(gè)世界:return_point (x)。 這便是 CPS 的初衷 —— 去掉層層嵌套的世界。行話講就是 desugar(脫糖)。Syntax sugar 是為了方便人類的表達(dá)和理解,給編程語(yǔ)言的核心套上的一層好吃好看的外衣,而對(duì)機(jī)器對(duì)程序的解釋,需要將其還原到最本質(zhì)的結(jié)構(gòu),以便機(jī)械化處理和優(yōu)化,這 就是脫糖的意義。

以函數(shù)式編程的觀點(diǎn)來(lái)看,return_point 是一個(gè)函數(shù),以 C 觀點(diǎn)來(lái)看,你可以把它理解為程序地址,或者,以 Matrix 來(lái)看,它是 key-maker 打開(kāi)門進(jìn)入新世界的那把鑰匙。“世界”上只有一個(gè)巨大的程序(比如,你的程序不過(guò)是在 chrome 里面運(yùn)行的一個(gè)小程序,而 chrome 又是在 OS 里面的一個(gè)小程序),return_point 將各種小程序竄連起來(lái)了。恩,差不多就是這個(gè)意思。只不過(guò),在函數(shù)式程序里面(比如Scheme)里面,return_point 是函數(shù),而在過(guò)程式程序(比如C)里面它更像是 0x4f36a0c4。

這段 40 多行代碼是給 Scheme 程序脫糖的程序,屬于解釋器的代碼,而不是應(yīng)用代碼。對(duì)其的客觀評(píng)價(jià)顯然只有設(shè)計(jì)解釋器的人才能給出。對(duì)應(yīng)用程序員的意義在于,發(fā)現(xiàn)每天上班時(shí)編寫的代碼多么無(wú)聊,此外并沒(méi)有任何實(shí)用價(jià)值。

2. 運(yùn)行結(jié)果

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

(k

(lambda (n k)

(if (zero? n)

(k 1)

(fact

fact

(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)) 才能通過(guò)算得 120。

3. 注釋

王垠的40行代碼是什么_王垠40行代碼專家解讀

4. 要點(diǎn)

ctx: 函數(shù)在執(zhí)行(apply)時(shí)候的上下文環(huán)境,可理解為 C 程序中運(yùn)行時(shí)的棧。

整 個(gè) cps 的(主要)過(guò)程就是 if 分支在不斷制造新的 ctx, 而 apply 分支(最后一個(gè)分支)不斷在新的 ctx 中 ‘計(jì)算’ (實(shí)際上是生成 cps 函數(shù)的代碼,而不是真的計(jì)算),并返回結(jié)果(到上一層 ctx)的過(guò)程。這個(gè)過(guò)程就是 scheme 的基本 eval-apply 過(guò)程。(參見(jiàn)SICP第四章)

這是一個(gè)解釋器(解釋成為 CPS 風(fēng)格的代碼),同時(shí)也是一個(gè)CPS轉(zhuǎn)換器,正所謂 Compiling with Continuations. 另外,Scheme 這種代碼即數(shù)據(jù)(字符串列表)的特性,使得編寫生成代碼的代碼相對(duì)容易和簡(jiǎn)潔。

至于代碼為何有 k 這個(gè)命名。呵呵,你可以叫它 kontinuation 或者 klosure.

5. 結(jié)論

以自然語(yǔ)言寫作比喻,編寫自解釋器級(jí)別的代碼,就像你在寫一本小說(shuō),而小說(shuō)的主角也在寫一本小說(shuō),這位主角在描寫你,對(duì)你的刻畫會(huì)影響到你,你受到影響之后又會(huì)改變小說(shuō)中的主角,從而影響到他對(duì)你的描寫。你倆要相安無(wú)事,情節(jié)合符邏輯地發(fā)展,直到最后圓滿的結(jié)尾。這比寫一本普通小說(shuō)可難多了。

網(wǎng)友評(píng)價(jià):

看來(lái)網(wǎng)友們關(guān)注的重點(diǎn),都在王垠說(shuō)的話上,很多網(wǎng)友都認(rèn)為他在吹牛。但是也有網(wǎng)友為他說(shuō)話的,覺(jué)得這40行代碼,確實(shí)很厲害,有些網(wǎng)友還悄悄的跑去運(yùn)行了一下。

網(wǎng)友一:這40行代碼的價(jià)值,開(kāi)始我是不以為然的。因?yàn)楦静欢歉陕镉谩V钡阶约核降奶嵘?,又?duì)這些代碼有研究,才發(fā)現(xiàn),這40行代碼的價(jià)值。

網(wǎng)友二:這40行代碼的價(jià)值既然不在于實(shí)現(xiàn)了CPS的算法,也不在于這段代碼寫得有多么精簡(jiǎn)和巧妙。而是:獨(dú)立思考。

網(wǎng)友三:這段代碼的功能是自動(dòng)把普通遞歸轉(zhuǎn)換為尾遞歸。

網(wǎng)友四:不懂js的人,就算是簡(jiǎn)單的js代碼也看不懂的。 很多人看不懂不代表沒(méi)有人看得懂。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7787

    瀏覽量

    92962
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4956

    瀏覽量

    73511
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    開(kāi)源鴻蒙生態(tài)共建成勢(shì),深開(kāi)鴻主干代碼貢獻(xiàn)量破650萬(wàn)

    1.3億代碼,1500多款產(chǎn)品通過(guò)兼容性測(cè)評(píng),構(gòu)建起覆蓋千百業(yè)的龐大生態(tài)體系。近日,作為開(kāi)源鴻蒙社區(qū)的核心貢獻(xiàn)者之一,深圳開(kāi)鴻數(shù)字產(chǎn)業(yè)發(fā)展有限公司(簡(jiǎn)稱“深開(kāi)
    的頭像 發(fā)表于 01-09 19:04 ?258次閱讀
    開(kāi)源鴻蒙生態(tài)共建成勢(shì),深開(kāi)鴻主干<b class='flag-5'>代碼</b>貢獻(xiàn)量破650萬(wàn)<b class='flag-5'>行</b>

    深開(kāi)鴻開(kāi)源鴻蒙社區(qū)主干代碼貢獻(xiàn)量破650萬(wàn)

    歷經(jīng)五年發(fā)展,開(kāi)源鴻蒙已從技術(shù)萌芽成長(zhǎng)為萬(wàn)物智聯(lián)時(shí)代的核心數(shù)字底座。秉持開(kāi)源、共建、共享、共榮的理念,其生態(tài)規(guī)模持續(xù)擴(kuò)張,累計(jì)匯聚超10000名貢獻(xiàn)者、510多家合作伙伴,沉淀1.3億代碼
    的頭像 發(fā)表于 01-07 10:22 ?413次閱讀

    上海市電子材料協(xié)會(huì)一蒞臨季豐電子參觀交流

    12月18日,上海市電子材料協(xié)會(huì)會(huì)長(zhǎng)馬靜一蒞臨季豐電子閔總部參觀交流,協(xié)會(huì)副會(huì)長(zhǎng)張偉明、周建輝,副會(huì)長(zhǎng)兼秘書長(zhǎng)建成及秘書處相關(guān)人員隨行。季豐電子董事長(zhǎng)兼總經(jīng)理鄭朝暉、輪值CEO倪衛(wèi)華攜公司管理團(tuán)隊(duì)熱情接待,并與到訪嘉賓展開(kāi)
    的頭像 發(fā)表于 12-28 15:21 ?984次閱讀

    日本汽車工業(yè)協(xié)會(huì)一到訪中汽中心

    2025年10月17日,日本汽車工業(yè)協(xié)會(huì)常務(wù)理事江坂弘一到訪中汽中心,與中汽中心黨委副書記曉杉進(jìn)行了座談交流。
    的頭像 發(fā)表于 10-21 09:38 ?466次閱讀

    中國(guó)包裝行業(yè)權(quán)威專家蒞臨匯川技術(shù)參觀指導(dǎo)

    8月27日,中國(guó)包裝行業(yè)權(quán)威專家——中國(guó)醫(yī)藥包裝協(xié)會(huì)特聘會(huì)長(zhǎng)、中國(guó)包裝聯(lián)合會(huì)包裝印刷與標(biāo)簽專業(yè)委員會(huì)主任許文才教授,中包聯(lián)包裝印刷與標(biāo)簽專業(yè)委員會(huì)副秘書長(zhǎng)艷霞、張?jiān)频纫?b class='flag-5'>行蒞臨匯川技術(shù)參觀指導(dǎo),圍繞自動(dòng)化、智能化及數(shù)智結(jié)合在包裝
    的頭像 發(fā)表于 09-03 18:03 ?756次閱讀

    HarmonyOSAI編程智能代碼解讀

    CodeGenie提供智能AI能力對(duì)框選的代碼片段進(jìn)行逐條解釋,總結(jié)代碼段含義,幫助開(kāi)發(fā)者提升閱讀代碼的速度和效率。 選中.ets文件或者.cpp文件中需要被解釋的代碼
    發(fā)表于 09-02 16:29

    全國(guó)人大代表學(xué)鋒一蒞臨思必馳調(diào)研

    日前,全國(guó)人大代表、致公黨江蘇省委會(huì)主委學(xué)鋒一深入人工智能領(lǐng)域領(lǐng)軍企業(yè)思必馳,圍繞“以企業(yè)為主體貫通‘兩個(gè)一公里’,健全全鏈條創(chuàng)新生態(tài)體系的政策舉措”展開(kāi)深度調(diào)研。思必馳副總裁李春梅熱情接待。
    的頭像 發(fā)表于 08-26 09:53 ?829次閱讀

    HarmonyOS AI輔助編程工具(CodeGenie)代碼智能解讀

    。 選中.ets文件或者.cpp文件中需要被解釋的代碼代碼片段,右鍵選擇CodeGenie > Explain Code,開(kāi)始解讀當(dāng)前代碼
    發(fā)表于 07-17 17:02

    AI眼鏡中國(guó)調(diào)研團(tuán)走進(jìn)谷東智能

    近日,由潮電智庫(kù)副總經(jīng)理孫燕飚主導(dǎo)的AI 眼鏡中國(guó)調(diào)研團(tuán)一 40 余人走進(jìn)谷東智能,開(kāi)啟了一場(chǎng)意義非凡的參觀交流之旅。谷東智能董事長(zhǎng)崔海濤、交付中心負(fù)責(zé)人進(jìn)親自熱情接待,現(xiàn)場(chǎng)洋溢
    的頭像 發(fā)表于 06-18 14:31 ?1068次閱讀

    上海雷克薩斯一到訪中汽中心

    近日,雷克薩斯(上海)新能源有限公司(以下簡(jiǎn)稱“上海雷克薩斯”)總經(jīng)理加藤武郎一到訪中汽中心,與中汽中心黨委副書記曉杉進(jìn)行了座談交流。
    的頭像 發(fā)表于 06-13 15:18 ?952次閱讀

    浩辰CAD看圖:攜手鴻蒙,CAD技術(shù)創(chuàng)新驅(qū)動(dòng)企業(yè)數(shù)字化轉(zhuǎn)型

    首批受邀啟動(dòng)HarmonyOSNEXT適配的頭部CAD軟件,開(kāi)發(fā)團(tuán)隊(duì)完成了超過(guò)300萬(wàn)代碼的跨平臺(tái)遷移任務(wù),實(shí)現(xiàn)了全量全功能的深度整合,并非簡(jiǎn)單的輕量化移植,成為全球
    的頭像 發(fā)表于 05-30 12:50 ?972次閱讀
    浩辰CAD看圖<b class='flag-5'>王</b>:攜手鴻蒙,CAD技術(shù)創(chuàng)新驅(qū)動(dòng)企業(yè)數(shù)字化轉(zhuǎn)型

    煙臺(tái)市發(fā)改委領(lǐng)導(dǎo)蒞臨華礪智調(diào)研

    近日,煙臺(tái)市發(fā)展改革委黨組書記、主任松杰率調(diào)研組蒞臨華礪智,實(shí)地參觀企業(yè)展廳,深入了解公司智能網(wǎng)聯(lián)技術(shù)研發(fā)成果與行業(yè)應(yīng)用實(shí)踐。
    的頭像 發(fā)表于 04-14 14:06 ?971次閱讀

    沐渥科技:氮?dú)夤窆收?b class='flag-5'>代碼解讀及處理建議

    氮?dú)夤竦墓收?b class='flag-5'>代碼因品牌和型號(hào)不同而有所差異,但通常涵蓋一些常見(jiàn)問(wèn)題。以下是沐渥科技對(duì)故障代碼解讀及處理建議:一、代碼解讀和原因分析1、E1
    的頭像 發(fā)表于 03-20 13:18 ?1090次閱讀
    沐渥科技:氮?dú)夤窆收?b class='flag-5'>代碼</b><b class='flag-5'>解讀</b>及處理建議

    DeepSeek扔的第二枚開(kāi)源炸是什么

    在DeepSeek啟動(dòng)的“開(kāi)源周”上(Open Source Week)DeepSeek將陸續(xù)開(kāi)源5個(gè)代碼庫(kù),大家關(guān)心的DeepSeek扔的第二枚開(kāi)源炸是什么?我們這里來(lái)簡(jiǎn)單介紹一下
    的頭像 發(fā)表于 02-26 11:05 ?1381次閱讀
    DeepSeek扔的第二枚開(kāi)源<b class='flag-5'>王</b>炸是什么

    15代碼引發(fā)1800多行編譯錯(cuò)誤:問(wèn)題排查挑戰(zhàn)

    寫了 15 代碼,編譯報(bào)錯(cuò)竟然高達(dá) 1800 多行,這種奔潰的瞬間應(yīng)該有很多同學(xué)遇到過(guò)。 代碼分為兩塊,一個(gè)頭文件,一個(gè)源文件。 test.h #ifndef TEST_H#define
    的頭像 發(fā)表于 02-12 11:10 ?783次閱讀