用 Lisp 解釋 Lisp (2010-12-09)

最近在讀《The Little Schemer》,一到七章都還好卖丸,到第八章就開始云里霧里了。書讀不透盏道,那么看代碼吧稍浆。好在已經(jīng)有了把示例都整理好了。那么開始吧。

我們期望能寫出一個能對任意表達式求值的函數(shù)衅枫,一般叫它eval嫁艇。不過,這里為了強調(diào)是我們自己的求值函數(shù)弦撩,叫它 value 步咪。

我們先來看兩個求值過程:

(value 6)  
(value '(add1 6))    ; 7  

我們不禁要問,這么多函數(shù)是必要的嗎益楼?它們起什么作用猾漫?

顯然,value是個入口函數(shù)偏形,因為它只用到了一次静袖。

meaning需要一個表達式和一張記錄變量名和其值的對照表(上下文環(huán)境)。這就引出一個問題俊扭,什么時候改寫對照表队橙?(*application)

接著,由expression-to-action判斷表達式是否為原子( atom )萨惑,是的話交給atom-to-action(如果是數(shù)字捐康、真假、cons, car, cdr, null?, eq?, atom?, zero?, add1, sub1, number?庸蔼,就交給*const解总;其他交給*identifier);否則交給list-to-action姐仅。

函數(shù)分為內(nèi)置函數(shù)( primitive )和自定義函數(shù)( non-primitive )兩類花枫。語言規(guī)定了內(nèi)置函數(shù)的行為,但對于自定義函數(shù)掏膏,我們只能在運行時確定劳翰,所以需要在定義時把它們的相關信息(如:參數(shù)、函數(shù)體)寫進對照表馒疹。
它們分別是這么存儲的:

(primitive primitive-name)
(non-primitive (table formals body)) (上下文 形參 函數(shù)體)

如佳簸,

(lambda (x) (cons x y))  

對照表的內(nèi)容是

((( y  z)
  ((8) 9)))

那么,解釋器內(nèi)部是這么存儲的:

其中颖变,list (table formals body)叫做 closure record .

list-to-actionquote, lambda, cond之外函數(shù)交由*application處理生均。*application對函數(shù)和參數(shù)列表分別進行處理,按函數(shù)類型將primitive交給apply-primitive腥刹,而將non-primitive交給apply-closure處理马胧。

evlis對 list 中的各個元素依次求值,把結(jié)果合成一個 list 返回衔峰。

evcon用于對cond求值漓雅。

剩下的各位還是看書吧??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末录别,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子邻吞,更是在濱河造成了極大的恐慌组题,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抱冷,死亡現(xiàn)場離奇詭異崔列,居然都是意外死亡,警方通過查閱死者的電腦和手機旺遮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門赵讯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耿眉,你說我怎么就攤上這事边翼。” “怎么了鸣剪?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵组底,是天一觀的道長。 經(jīng)常有香客問我筐骇,道長债鸡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任铛纬,我火速辦了婚禮厌均,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘告唆。我一直安慰自己棺弊,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布擒悬。 她就那樣靜靜地躺著模她,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天栏尚,我揣著相機與錄音宠默,去河邊找鬼。 笑死运怖,一個胖子當著我的面吹牛拼弃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摇展,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼吻氧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盯孙,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤鲁森,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后振惰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歌溉,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年骑晶,在試婚紗的時候發(fā)現(xiàn)自己被綠了痛垛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡桶蛔,死狀恐怖匙头,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仔雷,我是刑警寧澤蹂析,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站朽寞,受9級特大地震影響识窿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脑融,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一喻频、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肘迎,春花似錦甥温、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匣沼,卻和暖如春狰挡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背释涛。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工加叁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唇撬。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓它匕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窖认。 傳聞我的和親對象是個殘疾皇子豫柬,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 3,622評論 0 7
  • 林子大了什么鳥都有告希。明白的地方都是中規(guī)中矩的嚴明律己。 中途抽煙烧给,休息燕偶,吃飯,都是有條文規(guī)定的础嫡,地點時間明確得讓人...
    余巍_d00a閱讀 195評論 0 0
  • 久違遇見最美好的自己驰吓,平淡的生活本是一種福涧尿。 不知不覺上半年已經(jīng)過去了,只記得上半年我每天在路上檬贰,周轉(zhuǎn)于飛機姑廉、大巴...
    胖嘟嘟的貓咪閱讀 381評論 0 1
  • 我在翻譯在德國的注意事項 我:看我像不像商界大佬 于:嗯 是挺像大佬
    檻上人45閱讀 130評論 0 1
  • 2017年11月23日我在實小講了一節(jié)課,一年級的《道德與法制》翁涤,感覺這次講課比以前進步了很多桥言,沒有了緊張...
    心如止水鵑閱讀 155評論 0 0