转自http://blog.csdn.net/keyboardota/article/details/8240250java
有关Lisp语言中的Do循环,就像不少人说的同样,初看起来太奇怪了,不知道怎么理解。因此在这里作一个简单的介绍,看完你们能够发现其实Lisp中的do循环也是比较简单的。程序员
先看看Lisp语言中对于do循环的说明:函数
翻译成“中文”大概意思是这样的:oop
(do (变量定义)
(结束条件 返回值)
循环主体)
其中的“变量定义”又有一些格式,展开大概是这个样子的:测试
如今咱们但愿定义一个变量x,x的初值是1,每次循环x=x+1,当x>10时结束循环,在循环主体中经过format函数输出变量x,则它的Lisp代码是这个样子的: spa
(do ((x 1 (1+ x))) ((> x 10) nil) (format t "in the loop~a ~%" x))
为了让各位程序员更好地理解以上Lisp代码,在这里列出对应的java代码:.net
注意这里没有使用java里的do while或者是do until循环,缘由是java里的do while 和 do until循环都在执行循环主体后才进行判断,而Lisp中的do循环一开始就进行判断。翻译
因此上面使用了java中的while循环,条件也变成了x<=10.code
下面是Lisp中使用do循环的完整代码,定义了一个测试函数叫do-test,为了让输出更加清晰,在do循环先后分别加了一行输出。orm
(defun do-test () (format t "staring do loop~%") (do ((x 1 (1+ x))) ((> x 10) nil) (format t "in the loop~a ~%" x)) (format t "end of do loop~%"))