我目前正在學習Scheme(使用球拍),但是我遇到的挑戰之一是試圖執行以下代碼,這意味着要執行球拍代碼從用戶輸入使用eval
:無法在球拍上對用戶輸入使用eval
(display (eval (read)))
這裏有一些怪異的行爲至今我觀察到的:
定義窗口中的提示鍵盤輸入,如預期的那樣運行定義。然而,提供輸入
((lambda (x) (+ x 1)) 1)
給出了錯誤
?: function application is not allowed; no #%app syntax transformer is bound in: ((lambda (x) (+ x 1)) 1)
在另一方面,使用
(display ((eval (read)) 1))
並提供輸入
(lambda (x) (+ x 1))
返回錯誤
lambda: unbound identifier; also, no #%app syntax transformer is bound in: lambda
- 但是,在控制檯窗格中運行
(display (eval (read)))
並提供((lambda (x) (+ x 1)) 1)
(與定義窗格相反)會按預期打印出2
。
這種行爲的原因是什麼?
我想知道,你使用'eval'是因爲你好奇,還是你想做一些你不知道該怎麼做的事情? –
@Alex我使用'eval'是因爲我很好奇,並不是因爲我試圖做任何解決方法。 – Edwin
嘿,埃德溫只是一個領導,球拍是與計劃不同的語言,不只是一個計劃方言。 (就像C++是一種與C不同的語言,即使它們看起來各不相同)。正如Alex的答案所指出的那樣,解決方案與Scheme中解決此問題的方案會有很大的不同,因爲它們都有不同的語法和評估模型。因此,我將更新此問題以刪除方案參考,因爲它們不相關。如果您寧願讓他們隨時撤消該編輯。 :) –