了解了Lisp语言的条件判断,让我们看看Lisp语言的循环控制。对于稍有编程经验的人来说,循环是比较容易理解的,一般语言里面的循环无外乎for循环,while循环,do until循环等,有些语言的循环稍微复杂一点,也不过是一些变化形式。而Lisp语言里的循环却不是这么简单,查找Lisp中loop的使用就可以发现一系列的资料,有关于loop的简单使用的,有关于loop的高阶使用的,仔细看起来会觉得学习loop的使用都像是在学习一门语言,而不是某中语言的一个关键字。究其根源,loop其实是一个宏,是Lisp自我扩展的结果。有关于宏的深入了解不是短短一篇文章可以完成的,也不是本文的目的,这里暂时不作讨论。
在不讨论宏的情况下,我们可以用一种简单的方法来学习Lisp中的循环,就是列出一些常用的,容易理解的loop循环,直接当标准语法记住,就如同我们记住其它语言的for循环一样。
Lisp中的for循环使用样例如下:
(defun looptest1 ()
(loop for i from 1 to 10 do
(format *query-io* "*"))
)
上面循环语句的作用类似于c语言的for (i=1 ;i < = 10 ;i++)。
执行的结果是循环输出*号。
Lisp中还用一种常用的loop循环是遍历一个列表,样例如下:
(defun looptest2 ()
(setq i-list