可能有一種情況,當需要執(zhí)行代碼塊多次。循環(huán)語句可以讓我們執(zhí)行一個語句或語句組多次,下面是在大多數(shù)編程語言中的循環(huán)語句的一般形式為:
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)是迭代通過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)。
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結(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)造允許循環(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)造允許迭代通過列表的每個元素。
實例,
創(chuàng)建一個名為main.lisp一個新的源代碼文件,并在其中輸入如下代碼: