我是lisp的新手,我正在学习。
标准的常见lisp中断函数1.弹出调试器,然后2.如果选择继续,则返回nil。
在我看来,一个中断函数会让你进入调试器但返回它的INPUT将非常有用。然后,您可以在给定的s表达式周围透明地插入它,以查看该点的程序状态。
所以我可以做类似
的事情CL-USER> (break-transparent (+ 1 2))
会让我进入调试器并让我环顾四周然后返回
3
在lisp中是否有这样的东西,如果没有,有没有办法制作这样的东西?我对宏还不好。
谢谢,
编辑: Doug Currie用一个简单的宏来回答这个问题。这是我稍微修改过的版本,对于其他任何有这个问题的人来说,它会在调试器窗口中显示断开透明的前面和中心的参数。
(defmacro break-transparent (exp)
`(let ((x ,exp)) (break "argument to break: ~:S" x) x))
答案 0 :(得分:2)
您可以将break-transparent
写为扩展为:
(progn
(break)
(+ 1 2))
或者如果你真的想在休息之前评估表达式:
(let ((x (+ 1 2)))
(break)
x)
所以,
(defmacro (break-transparent exp)
`(let ((x ,exp)) (break) x))
答案 1 :(得分:0)
由于您在稍微修改过的版本中添加了问题的其他答案中的宏,因此这里的固定版本不会添加可能会干扰现有版本的新标识:
(defmacro break-transparent (value)
(let ((g (gensym)))
`(let ((,g ,value))
(break "argument to break: ~:S" ,g)
,g)))