這裏是你可以在計劃做:如何修改Common Lisp中的函數綁定?
> (define (sum lst acc)
(if (null? lst)
acc
(sum (cdr lst) (+ acc (car lst)))))
> (define sum-original sum)
> (define (sum-debug lst acc)
(print lst)
(print acc)
(sum-original lst acc))
> (sum '(1 2 3) 0)
6
> (set! sum sum-debug)
> (sum '(1 2 3) 0)
(1 2 3)
0
(2 3)
1
(3)
3
()
6
6
> (set! sum sum-original)
> (sum '(1 2 3) 0)
6
如果我做Common Lisp中的以下內容:
> (defun sum (lst acc)
(if lst
(sum (cdr lst) (+ acc (car lst)))
acc))
SUM
> (defvar sum-original #'sum)
SUM-ORIGINAL
> (defun sum-debug (lst acc)
(print lst)
(print acc)
(funcall sum-original lst acc))
SUM-DEBUG
> (sum '(1 2 3) 0)
6
現在我怎麼可以這樣做(setf sum #'sum-debug)
會改變的結合用defun
定義的函數?
雖然問題可能不會(或可能)是重複的,你可以給你的答案質疑的一些其他問題,如[如何存儲找到答案函數在Lisp中的變量中並使用它](http://stackoverflow.com/q/19375270/1281433),[LISP動態定義函數](http://stackoverflow.com/q/22975732/1281433)和[爲什麼defun不一樣(setq)?](http://stackoverflow.com/q/11212717/1281433) –
2015-03-02 17:53:57