Lisp中的Loop宏

  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,後面跟着一個提供初值的形式。

原文鏈接:http://www.gigamonkeys.com/book/loop-for-black-belts.html

  翻譯的目地主要是自己學習,如果有什麼不合適的地方,歡迎討論。

  !!後續繼續翻譯!!

  本文完。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章