Lisp - 循环



在某些情况下,您可能需要执行一段代码多次。循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式。

Loops

LISP 提供以下类型的结构来处理循环需求。点击以下链接查看其详细信息。

序号 结构 & 描述
1 loop

loop 结构是 LISP 提供的最简单的迭代形式。在其最简单的形式中,它允许您重复执行某些语句,直到找到一个return语句。

2 loop for

loop for 结构允许您实现类似于 for 循环的迭代,这在其他语言中最常见。

3 do

do 结构也用于使用 LISP 执行迭代。它提供了一种结构化的迭代形式。

4 dotimes

dotimes 结构允许循环执行固定次数的迭代。

5 dolist

dolist 结构允许遍历列表的每个元素。

优雅地退出块

blockreturn-from 允许您在发生任何错误时优雅地退出任何嵌套块。

block 函数允许您创建一个命名块,其主体由零个或多个语句组成。语法为:

(block block-name(
...
...
))

return-from 函数接受一个块名称和一个可选的(默认为 nil)返回值。

以下示例演示了这一点:

示例

创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码:

main.lisp

; define a function accepting a flag
(defun demo-function (flag)
   ; print the block name
   (print 'entering-outer-block)
   ; start a block
   (block outer-block
      ; print the block name   
      (print 'entering-inner-block)
      (print (block inner-block
         ; if flag is true        
         (if flag
            ; return 3		 
            (return-from outer-block 3)
            ; return 5			
            (return-from inner-block 5)
         )
         (print 'This-wil--not-be-printed))
      )
      ; print block name 
      (print 'left-inner-block)
      ; print block name	  
      (print 'leaving-outer-block)
   t)
)
; call the function
(demo-function t)
; terminate printing
(terpri)
; call the function
(demo-function nil)

当您点击“执行”按钮或键入 Ctrl+E 时,LISP 会立即执行它,并返回以下结果:

ENTERING-OUTER-BLOCK 
ENTERING-INNER-BLOCK 

ENTERING-OUTER-BLOCK 
ENTERING-INNER-BLOCK 
5 
LEFT-INNER-BLOCK 
LEAVING-OUTER-BLOCK
广告