2013-09-27 62 views
1

例如,我想這樣定義一個函數:如何在LISP中將算術運算符作爲函數參數傳遞?

(defun operation (op) 
    (op 3 7)) 

但口齒不清編譯器會抱怨這樣的代碼:(operation +)

有沒有辦法通過算術運算符,函數參數?

+0

可能重複http://stackoverflow.com/questions/6882502/how-do:如果是改寫這樣你的代碼應該工作-i-use-a-function-as-a-variable-in-lisp) –

+0

(這實際上不是一個很好的重複,但更好的答案將是這個問題的一個很好的答案。) –

回答

3

Lisp方言有兩類:Lisp-1和Lisp-2。 Lisp-1意味着函數和變量共享一個命名空間。 Scheme是一個Lisp-1。 Lisp-2意味着函數和變量具有不同的名稱空間。 Common Lisp是一個Lisp-2。如果要將名爲a的函數作爲參數傳遞給另一個函數,則必須將其稱爲#'a。如果你有一個函數存儲在一個變量中,你可以使用apply函數來執行它。

(defun operation (op) 
    (apply op '(3 7))) 

(operation #'+) 
的[?我怎麼使用的功能,如LISP變量(
+3

還有'funcall '函數就像'apply'一樣,但擴展參數而不是收集到列表中,所以'(apply op'(3 7))'也可以寫成'(funcall op 3 7)'。 –

+2

有關何時使用的更多信息,請參見[何時使用APPLY和FUNCALL?](http://stackoverflow.com/q/3862394/1281433) –

相關問題