2012-03-16 44 views
2

我遇到方案功能問題。如何將操作員傳遞給方案功能

(define myfun(operator lis) 
    (if(null? lis) 
    '() 
    (cons(operator (car lis)(car lis))myfun(operator (cdr lis)) 
)))) 

功能需要運營商作爲一個參數,例如(+'(1 2 3 4)) 列表和錯誤,我得到當我試圖調用該函數:期待一個號碼,但收到的列表。所以我的問題是我如何用運算符和列表遞歸調用一個函數?

更新:只需要一個'在運營商之前簽字。

+0

有沒有 「經營者」。相反,有一些名稱由符號組成的功能。他們的工作方式與任何其他功能一樣,所以你可以打電話給他們,就像你任何其他功能一樣通過他們 – newacct 2012-03-16 19:15:02

回答

4

只需通過+即可,不需要任何引用。 +表示附加功能。

(define (apply-op op x) 
    (op x x)) 

將在方案執行

(apply-op + 2) ==> 4 
+0

謝謝,這是一個括號裏的錯誤,它毀了我.. – 2012-03-16 13:53:32

+2

看着你的代碼,我可以立即預測你有括號問題:具體來說,你有左後衛的標識符後,例如「cons(operator)」這是一個巨大的警告信號,表明您正在考慮將左派作爲調用cons的一部分,而不是調用運算符。請留意此代碼中的模式! – 2012-03-16 18:02:25

相關問題