擺脫funcall的根據這份文件:http://cl-cookbook.sourceforge.net/functions.html如何Common Lisp中
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)
我不得不使用funcall調用(加法器12),這是非常無視於funcall遍地寫,是有什麼辦法可以在方案中寫出類似的代碼:
((adder 12) 1)
擺脫funcall的根據這份文件:http://cl-cookbook.sourceforge.net/functions.html如何Common Lisp中
(defun adder (n)
(lambda (x) (+ x n)))
(funcall (adder 12) 1)
我不得不使用funcall調用(加法器12),這是非常無視於funcall遍地寫,是有什麼辦法可以在方案中寫出類似的代碼:
((adder 12) 1)
不,沒有。
您也可以將其看作一個功能:它可以顯式調用函數對象並提高源代碼的可理解性。
但是,你可以使用這樣的事情(不知道爲什麼你會,但鍵入的字符數是相同的,因爲它是在計劃):
(set-macro-character
#\[
#'(lambda (stream char)
(declare (ignore char))
(set-syntax-from-char #\] #\;)
(let ((forms (read-delimited-list #\] stream t)))
(set-syntax-from-char #\] #\x)
(append '(funcall) forms))))
(defun adder (n)
#'(lambda (x) (+ x n)))
(format t "sum: ~s~&" [(adder 12) #x128]) ;; 308
這可能給你一些如果你會遇到一個帶括號的變量名稱的問題。當然,使用它取決於你,考慮自己的警告。
這是最好的答案。推論:如果你想寫計劃,寫計劃。 – jwmc