2013-05-02 51 views
1

我對將方格放在方案中有點困惑。下面的例子:如何判定方案中的偏見

=>(define foo1 (lambda (n) (+ n 1))) 
=>(foo1 ((lambda() 5))) 

=>value:6 

給出結果6.但我很驚訝,爲什麼這沒有給出錯誤。這是我如何thnik應該是電腦:首先,(拉姆達()5)表達式計算並返回5.現在我們的刪除其括號:

=>(foo (5)) 

而現在,這應該是無效的,因爲我們不這樣做調用函數時使用參數。但它沒有錯誤。有人能告訴我我做錯了什麼嗎?

謝謝

回答

3

好吧!最後想出了這裏發生了什麼。

這種說法實際上是計算爲5:

((拉姆達()5))

嘗試在你的REPL。

內部部分(lambda()5)創建一個過程。外部paranthesis對'(',')'調用該函數。顯然這使得它返回5!

+0

你是對的,這真的很奇怪,或者我認爲這是奇怪的,因爲我是新的計劃。謝謝 – yrazlik 2013-05-02 07:17:35

+0

哈哈。自從我觸及計劃以來,這已經有一段時間了。這個問題激發了我的好奇心,足以再次打開我塵封的DrRacket。乾杯! – 2013-05-02 07:19:42

1

Scheme在代碼和數據之間沒有根本的區別。爲什麼要提到這個?這是因爲Lambda的返回總是一個函數或一個錯誤,那就是它返回代碼而不是簡單的數據。任何其他返回函數的函數都會以相同的方式運行。

相關問題