0

我是 lisp 的新手,我边走边学。

标准的通用 lisp 中断函数 1. 将您弹出到调试器中,并且 2. 如果您选择继续,则返回 nil。

在我看来,将您弹出到调试器但返回其输入的中断功能将非常有用。然后,您可以将它透明地插入给定的 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))
4

2 回答 2

2

您可以编写break-transparent为扩展为的宏:

(progn
  (break)
  (+ 1 2))

或者如果您真的想在休息前评估表达式:

(let ((x (+ 1 2)))
  (break)
  x)

所以,

(defmacro (break-transparent exp)
  `(let ((x ,exp)) (break) x))
于 2013-09-21T01:43:31.307 回答
0

由于您已将宏从另一个答案添加到您的问题的略微修改版本中,因此这是一个固定版本,它不会添加可能会干扰现有标识符的新标识符:

(defmacro break-transparent (value)
  (let ((g (gensym)))
    `(let ((,g ,value))
      (break "argument to break: ~:S" ,g)
      ,g)))
于 2013-09-21T13:33:47.943 回答