是否有可能在CL中追踪一个闭包?例如,我可以追踪下面的foo-3吗?
(defun foo (n)
(lambda (i) (incf n i)))
FOO
(setf foo-3 (foo 3))
#<CLOSURE :LAMBDA (I) (INCF N I)>
(funcall foo-3 2)
5
(funcall foo-3 2)
7
(trace ???)
Run Code Online (Sandbox Code Playgroud)
小智 1
确实可以这样做。Trace 在函数命名空间中查找函数,因此请确保不要混合值和函数。
(setf (symbol-function 'test)
(let ((n 0))
(lambda (x)
(incf n x))))
=>
#<Interpreted Closure TEST>
(trace test)
...
(test 4)
=>
0[2]: (TEST 4)
0[2]: returned 4
4
(test 3)
=>
0[2]: (TEST 3)
0[2]: returned 7
7
Run Code Online (Sandbox Code Playgroud)