例如,我想這樣定義一個函數:如何在LISP中將算術運算符作爲函數參數傳遞?
(defun operation (op)
(op 3 7))
但口齒不清編譯器會抱怨這樣的代碼:(operation +)
有沒有辦法通過算術運算符,函數參數?
例如,我想這樣定義一個函數:如何在LISP中將算術運算符作爲函數參數傳遞?
(defun operation (op)
(op 3 7))
但口齒不清編譯器會抱怨這樣的代碼:(operation +)
有沒有辦法通過算術運算符,函數參數?
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變量(
還有'funcall '函數就像'apply'一樣,但擴展參數而不是收集到列表中,所以'(apply op'(3 7))'也可以寫成'(funcall op 3 7)'。 –
有關何時使用的更多信息,請參見[何時使用APPLY和FUNCALL?](http://stackoverflow.com/q/3862394/1281433) –
可能重複http://stackoverflow.com/questions/6882502/how-do:如果是改寫這樣你的代碼應該工作-i-use-a-function-as-a-variable-in-lisp) –
(這實際上不是一個很好的重複,但更好的答案將是這個問題的一個很好的答案。) –