clisp中的调试展开

本文通过一个Lisp宏展开的例子介绍了如何使用`trace`来查看宏的具体展开过程。示例中定义了一个`while`宏,并通过`trace`观察其在实际调用中的展开形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看代码:

(defmacro while (test &rest body)
  `(do ()
       ((not ,test))
     ,@body))

(setq x 0)

(trace while)

(while (< x 10)
       (princ x)
       (incf x))

输出为:

;; Loading file lisp.lisp ...
WARNING: TRACE: redefining function WHILE in D:\test\lisp.lisp, was defined in
         top-level
;; Tracing macro WHILE.
1. Trace: (WHILE (< X 10) (PRINC X) (INCF X))
1. Trace: WHILE ==> (DO NIL ((NOT (< X 10))) (PRINC X) (INCF X))
0123456789
;; Loaded file lisp.lisp

利用 (trace while)可以把while的宏展开,从上面展开可以看出 (< x 10)替换了test, (princ x) (incr x)替换了body.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值