LOOP提供了一種寫循環迭代的特殊語言。
這可能看起來比較大動干戈----爲了寫循環特地發明一種新的語言。但是如果你想想循環在程序中的用處,這種行爲開始有點兒在理。不論任何程序的大小,他們都會包含好多循環語句。而且,儘管他們不盡相同,他們也不是完全不同;如果將循環前後的語句納入循環代碼的範疇,那麼循環的初始化,循環中的行爲,循環結束後的行爲就會透露出一些模式。LOOP語言捕獲這些模式,進而讓你更加直接表達他們。
LOOP宏包括好多部分:對LOOP宏詬病的一大抱怨就是其太複雜了。本章,我們將迎着LOOP而上,系統地學習LOOP的不同部分,以及他們之間如何組合。
LOOP的各個部分
使用LOOP可以完成以下目的:
- 遞進變量以及在不同數據結構上迭代
- 在循環的時候,collect,count,sum,maximize和minimize值
- 執行任意的LISP表達式
- 決定何時結束LOOP
- 條件地完成以上功能
另外,LOOP爲以下過程提供語法支持:
- 在within循環中創建局部變量
- 在LOOP循環體開始和結束後執行任意的LISP表達式
LOOP的基本結構是一組以LOOP開始的語句。每一個語句如何被LOOP宏解析是根據關鍵字來決定的。其中一些關鍵字如下:for, collecting(collect), summing(sum), counting(count), do, finally。
迭代控制
大多數的所謂的迭代控制語句以for或者as開始,然後根據一個變量的名字。變量名字後面的內容根據語句的目地而定。
語句的內部可以按如下方式迭代:
- 指定間隔的數的範圍,上界或者下界
- list數據結構中的每一個元素
- list中的每個結構
- vector中的每個元素,包括子類型,例如字符串和bit-vector
- 哈希表的鍵值對
- 包中的符號
- 不斷重複對指定的表達式的計算
一個簡單的循環語句可以具有多個語句,每個句子聲明自己的變量。當一個循環具有多個語句時,循環在任何一個語句達到其終止條件時終止。例如如下循環:
(loop
for item in list
for i from 1 to 10
do (something))
最多執行10次循環,但是如果list中包含元素少於10個,循環會提前結束。
計數循環
算數迭代語句控制循環體執行次數,每次在一個數的範圍內遞進變量,每一步都執行一次函數體。這些語句由for(as)後以下1到3個介詞短語組成:from where語句;to where語句;by how much語句。
from where語句指定語句變量的初始值。它由以下介詞組成:from, downfrom, upfrom,後面跟着一個提供初值的形式。
翻譯的目地主要是自己學習,如果有什麼不合適的地方,歡迎討論。
!!後續繼續翻譯!!
本文完。