【发布时间】:2015-05-03 03:29:39
【问题描述】:
您可以在 Scheme 中执行以下操作:
> (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 定义的函数的绑定?
【问题讨论】:
-
虽然这些问题可能不会(或可能)重复,但您可能会在其他一些问题的答案中找到您问题的答案,例如How to store a function in a variable in Lisp and use it、LISP dynamically define functions 和why defun is not the same as (setq <name> <lambda>)?
标签: variables binding scheme lisp common-lisp