web前端 Lisp值得去學(xué)習(xí)嗎?
Lisp值得去學(xué)習(xí)嗎?我認(rèn)為這是非常值得的,而且LISP的解釋器實(shí)現(xiàn)得很好,所以它不僅可以作為一種新的學(xué)習(xí)思路,而且可以作為學(xué)習(xí)編譯原理的材料。SiCp也需要lisp,為什么不呢。有些人更容易理解LI
Lisp值得去學(xué)習(xí)嗎?
我認(rèn)為這是非常值得的,而且LISP的解釋器實(shí)現(xiàn)得很好,所以它不僅可以作為一種新的學(xué)習(xí)思路,而且可以作為學(xué)習(xí)編譯原理的材料。SiCp也需要lisp,為什么不呢。有些人更容易理解LISP的思想,但是覺(jué)得Java風(fēng)格是不可接受的。例如,我的一個(gè)朋友,大阪黑子,聲稱他不懂java。他一看到lisp就明白了這一點(diǎn),于是加入了教學(xué)行列。我拍的另一張照片:個(gè)人:在學(xué)習(xí)編譯器原理之前,我編寫(xiě)了LISP解釋器。
完成一個(gè)Scheme解釋器需要哪些知識(shí)?
參考編程語(yǔ)言要點(diǎn)目錄,按順序編寫(xiě),然后將其寫(xiě)入完整的解釋器。
首先編寫(xiě)一個(gè)解釋算術(shù)表達(dá)式的解釋器;
然后添加let以生成局部變量;
然后添加lambda以生成非遞歸函數(shù);
然后添加letrec以生成遞歸函數(shù);
第一類函數(shù),現(xiàn)在已經(jīng)理解/實(shí)現(xiàn)close,下面的步驟是:添加語(yǔ)法sugar,如if else;將cons/cat/CDR更改為內(nèi)置函數(shù)(原來(lái)lambda計(jì)算可以模擬)并改進(jìn)內(nèi)存管理;
add quote and eval;
add set!引入賦值;
添加CPS轉(zhuǎn)換實(shí)現(xiàn)call/cc,支持尾部遞歸;
添加define語(yǔ)法支持宏;
然后再接再厲,添加一些非方案標(biāo)準(zhǔn)的東西:
添加record/set/map等數(shù)據(jù)類型,實(shí)現(xiàn)相應(yīng)的匹配(模式匹配)
如果不能滿足要求,就用類型LISP做:
添加類型標(biāo)簽,支持基本類型/函數(shù)類型;
支持ADT;
支持Mu類型;
添加類型派生;
支持Hindley Milner;
支持類型類/構(gòu)造函數(shù)類;
還有一些外圍工作要做:
添加FFI以使語(yǔ)言和C相互調(diào)用。
技能列表已準(zhǔn)備就緒。按這個(gè)順序做是對(duì)的。另外,不管后端效率如何(沒(méi)有虛擬機(jī),只有解釋),都不建議用C寫(xiě)解釋器,最好用函數(shù)式語(yǔ)言寫(xiě)解釋器。
解釋器相關(guān)文獻(xiàn)推薦:
LISP小品
編程語(yǔ)言要領(lǐng)
類型和編程語(yǔ)言