IT干货网

common-lisp之跟踪闭包

lonelyxmas 2025年01月19日 编程设计 40 0

是否可以在 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 ???) 

请您参考如下方法:

我认为这是不可能的:据我所知,跟踪宏的工作原理通常是将给定符号处的函数替换为调用原始符号并打印出跟踪位的包装器。

如果您对(复杂的)实现细节感兴趣,SBCL 代码位于 src/code/ntrace.lisp (您可能想查看 trace-1 函数)。

当然,如果你只想在调用 foo-3 时打印出一些东西,你总是可以在 foo...


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!