鍍金池/ 教程/ Java/ LISP - 循環(huán)
LISP - 樹
LISP - 錯誤處理
LISP - 謂詞
LISP - 決策
LISP - 變量
LISP - 數(shù)組
LISP - 對象系統(tǒng)(CLOS)
LISP - 輸入和輸出
Lisp教程
LISP - 數(shù)字
LISP - 循環(huán)
LISP - 常量
LISP - 集合
LISP - 字符
LISP - 程序結(jié)構(gòu)
LISP - 文件I/O
LISP - 哈希表
LISP - 宏
LISP - 數(shù)據(jù)類型
LISP - 包
LISP - 符號
LISP - 運算符
LISP - 基本語法
LISP - 函數(shù)
LISP - 向量
LISP - 結(jié)構(gòu)
LISP - 概述介紹

LISP - 循環(huán)

可能有一種情況,當需要執(zhí)行代碼塊多次。循環(huán)語句可以讓我們執(zhí)行一個語句或語句組多次,下面是在大多數(shù)編程語言中的循環(huán)語句的一般形式為:

Loop constructs

LISP提供的結(jié)構(gòu)來處理循環(huán)要求以下類型。點擊以下鏈接,查看其詳細信息。

Construct 描述
loop 循環(huán)loop結(jié)構(gòu)是迭代通過LISP提供的最簡單的形式。在其最簡單的形式,它可以重復執(zhí)行某些語句(次),直到找到一個return語句。
loop for loop結(jié)構(gòu)可以實現(xiàn)一個for循環(huán)迭代一樣作為最常見于其他語言。
do do 結(jié)構(gòu)也可用于使用LISP進行迭代。它提供了迭代的一種結(jié)構(gòu)形式。
dotimes dotimes構(gòu)造允許循環(huán)一段固定的迭代次數(shù)。
dolist dolist來構(gòu)造允許迭代通過列表的每個元素。

循環(huán)loop結(jié)構(gòu)

循環(huán)loop結(jié)構(gòu)是迭代通過LISP提供的最簡單的形式。在其最簡單的形式,它可以重復執(zhí)行某些語句(次),直到找到一個return語句。

它的語法如下:

(loop (s-expressions))

例子

創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:

(setq a 10)
(loop 
   (setq a (+ a 1))
   (write a)
   (terpri)
   (when (> a 17) (return a)))

當執(zhí)行的代碼,它返回以下結(jié)果:

11
12
13
14
15
16
17
18

請注意,沒有return語句,循環(huán)宏會產(chǎn)生一個無限循環(huán)。

循環(huán)的構(gòu)造

loop結(jié)構(gòu)可以實現(xiàn)一個for循環(huán)迭代一樣作為最常見于其他語言。

它可以

  • 設置為迭代變量

  • 指定表達式(s)表示,將有條件終止迭代

  • 對于執(zhí)行某些任務在每次迭代中指定表達式的結(jié)果,

  • 做一些任務而退出循環(huán)之前指定表達式(s)和表達式

在for循環(huán)的結(jié)構(gòu)如下幾種語法:

(loop for loop-variable in <a list>
   do (action))
            
(loop for loop-variable from value1 to value2
   do (action))

示例1

創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:

(loop for x in '(tom dick harry)
     do (format t " ~s" x)
)

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:

TOM DICK HARRY

示例2

創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:

(loop for a from 10 to 20
     do (print a)
)

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:

10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 

示例3

創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:

(loop for x from 1 to 20
  if(evenp x)
  do (print x)
)

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:

2 
4 
6 
8 
10 
12 
14 
16 
18 
20

do構(gòu)造

do結(jié)構(gòu)也可用于使用LISP進行迭代。它提供了迭代的一種結(jié)構(gòu)形式。

do語句的語法:

(do (variable1       value1       updated-value1)
    (variable2       value2      updated-value2)
    (variable3       value3       updated-value3)
    ...
(test     return-value)
(s-expressions))

每個變量的初始值的計算和結(jié)合到各自的變量。每個子句中更新的值對應于一個可選的更新語句,指定變量的值將在每次迭代更新。

每次迭代后,將測試結(jié)果進行評估計算,并且如果它返回一個nil 或 true,則返回值被求值并返回。

最后一個S-表達式(s)是可選的。如果有,它們每一次迭代后執(zhí)行,直到測試返回true值。

示例

創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:

(do ((x 0 (+ 2 x))
    (y 20 ( - y 2)))
    ((= x y)(- x y))
    (format t "~% x = ~d  y = ~d" x y))

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:

x = 0  y = 20
x = 2  y = 18
x = 4  y = 16
x = 6  y = 14
x = 8  y = 12

dotimes 構(gòu)造

dotimes構(gòu)造允許循環(huán)一段固定的迭代次數(shù)。

實例,

創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼:

(dotimes (n 11)
    (print n) (prin1 (* n n)))

當單擊Execute按鈕,或按下Ctrl+ E,LISP立即執(zhí)行它,返回的結(jié)果是:

0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100

dolist 構(gòu)造

dolist來構(gòu)造允許迭代通過列表的每個元素。

實例,

創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼: