2009-09-10 89 views
2

以下是SICP的練習。我無法自己想出來。可以有些爲什麼幫助我理解?計劃中的報價

類型下面的代碼爲interpreator:

(car ''abracadabra) 

,並打印出 '報價'。爲什麼?

+3

沒有一個真正的lisp程序員,但它可能是因爲''symbol'實際上只是'(quote symbol)'的簡寫。 – gimpf 2009-09-10 12:58:48

回答

6

正如gimpf所說,'abracadabra =(引用abracadabra)。你可以通過在REPL中輸入''abracadabra來驗證這一點,它將打印(引用abracadabra)。

0

因爲''abracadabra真的(引用(引用abracadabra))。在Scheme中,規則是:評估s表達式的所有部分,並將第一部分應用到其餘部分。

「car」和「quote」是下面的符號。 #car和#quote是它們所指的功能。

如果你把

(car (quote (quote abracadabra))) 

和評估部分,你會得到

(#car (quote abracadabra)) 

然後,在第一個零件(汽車功能)的第二部分(兩個符號的列表) 。

quote 

而你得到的只是符號 「報價」。

只要記住,要弄清楚Scheme中會發生什麼,評估零件並將其中的第一個應用到其餘部分。如果你評價報價,你會得到內部的東西。唯一令人困惑的部分是一些原始數據(數字和字符串)自我評估。