Lisp - do 迴圈結構



do 迴圈結構也用於使用 LISP 執行迭代。它提供了一種結構化的迭代形式。

do 語句的語法:

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

每個變數的初始值都會被計算並繫結到相應的變數。每個子句中的更新值對應於一個可選的更新語句,該語句指定了每個迭代中變數的值將如何更新。

每次迭代後,都會評估測試條件,如果返回非 nil 或 true,則評估返回值並返回。

最後一個 S 表示式(或表示式)是可選的。如果存在,它們會在每次迭代後執行,直到測試值返回 true。

示例 - 將數字遞增/遞減至相等

在這個例子中,我們正在 do 迴圈結構中遞增和遞減變數,並列印變數。建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼:

main.lisp

; perform a do loop
(do ((x 0 (+ 2 x)) ; initialize x to 0 and increment by 2
   (y 20 ( - y 2))) ; initialize y to 20 and decrement by 2
   ((= x y))  ; checking if x and y is same
   ; print values
   (format t "~% x = ~d  y = ~d" x y)
)

輸出

當您單擊“執行”按鈕或鍵入 Ctrl+E 時,LISP 會立即執行它,並返回以下結果:

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

示例 - 將數字遞增/遞減至遞增的數字大於另一個數字

在這個例子中,我們正在 do 迴圈結構中遞增和遞減變數,並列印變數。建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼:

main.lisp

; perform a do loop
(do ((x 0 (+ 2 x)) ; initialize x to 0 and increment by 2
   (y 20 ( - y 2))) ; initialize y to 20 and decrement by 2
   ((> x y))  ; checking if x is greater than y
   ; print values
   (format t "~% x = ~d  y = ~d" x y)
)

輸出

當您單擊“執行”按鈕或鍵入 Ctrl+E 時,LISP 會立即執行它,並返回以下結果:

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

示例 - 將數字遞增/遞減至遞減的數字小於另一個數字

在這個例子中,我們正在 do 迴圈結構中遞增和遞減變數,並列印變數。建立一個名為 main.lisp 的新原始碼檔案,並在其中鍵入以下程式碼:

main.lisp

; perform a do loop
(do ((x 0 (+ 2 x)) ; initialize x to 0 and increment by 2
   (y 20 ( - y 2))) ; initialize y to 20 and decrement by 2
   ((< y x))  ; checking if y is less than y
   ; print values
   (format t "~% x = ~d  y = ~d" x y)
)

輸出

當您單擊“執行”按鈕或鍵入 Ctrl+E 時,LISP 會立即執行它,並返回以下結果:

x = 0  y = 20
x = 2  y = 18
x = 4  y = 16
x = 6  y = 14
x = 8  y = 12
x = 10 y = 10
lisp_loops.htm
廣告

© . All rights reserved.