2014-02-26 32 views
3

爲什麼不能將「if-then-else」結構模擬爲支持函數應用的解釋器中的函數? Scheme中的「let」函數類似於「if-then-else」嗎?解釋器,如果聲明並讓

+4

你可以實現'if'作爲一個函數,但是如果你這樣做了,你需要編寫'then'和'else'部分函數,​​以便延遲它們的評估。 –

回答

4

在方案的if語句如下:

(if <predicate> <consequent> <alternate>) 

和定義使得<consequent>評估只有當<predicate>不假,使得<alternate>評估只有當<predicate>是錯誤的。所以你可以看到像

(if #t (display "okay") (shut-down-the-nsa)) 

永遠不會真正關閉國家安全局。

但是,如果if是一個函數,如:

(<operator> <operand> …) 

那麼每個<operand>總是被判斷。在if聲明的上下文中,這意味着將對<consequent><alternate>進行評估 - 而不是if

+0

非常感謝您的幫助。 你能解釋一下關於「let」的功能麼? –

+1

@ sara_123讓我們只是語法糖。 (((x 2)(y 3))(+ x y))與((lambda(x y)(+ x y))2 3)相同,但並不一定以解釋器中的方式實現。 – WorBlux