如何在lisp中编写宏for循环来模仿C或Java中的for循环?

问题描述 投票:0回答:1

在lisp中,我想编写一个宏for循环,而不使用lisp中的循环函数,它模仿C或Java中的for循环。我想只用基本的 Lisp 语法来实现这一点。

lisp common-lisp
1个回答
0
投票

loop
do
以及其他迭代宏通常会扩展为
tagbody
形式。

如果您想编写自己的迭代宏,最好看看如何在 Common Lisp 实现中扩展

loop
。这是 SBCL 中
loop
形式的扩展:

CL-USER> (macroexpand-1 '(loop for x from 1 to 10 do (print x)))
(BLOCK NIL
  (LET ((X 1))
    (DECLARE (IGNORABLE X)
             (TYPE (AND REAL NUMBER) X))
    (TAGBODY
     SB-LOOP::NEXT-LOOP
      (WHEN (> X '10) (GO SB-LOOP::END-LOOP))
      (PRINT X)
      (SB-LOOP::LOOP-DESETQ X (1+ X))
      (GO SB-LOOP::NEXT-LOOP)
     SB-LOOP::END-LOOP)))
T
© www.soinside.com 2019 - 2024. All rights reserved.