转自http://blog.csdn.net/keyboardota/article/details/8240250

有关Lisp语言中的Do循环,就像很多人说的一样,初看起来太奇怪了,不知道怎么理解。所以在这里做一个简单的介绍,看完大家可以发现其实Lisp中的do循环也是比较简单的。

先看看Lisp语言中对于do循环的说明:

翻译成“中文”大概意思是这样的:

(do (变量定义)
(结束条件 返回值)
循环主体)

其中的“变量定义”又有一些格式,展开大概是这个样子的:

现在我们希望定义一个变量x,x的初值是1,每次循环x=x+1,当x>10时结束循环,在循环主体中通过format函数输出变量x,则它的Lisp代码是这个样子的:

(do ((x 1 (1+ x)))
((> x 10) nil)
(format t "in the loop~a ~%" x))

为了让各位程序员更好地理解以上Lisp代码,在这里列出对应的java代码:

注意这里没有使用java里的do while或者是do until循环,原因是java里的do while 和 do until循环都在执行循环主体后才进行判断,而Lisp中的do循环一开始就进行判断。

所以上面使用了java中的while循环,条件也变成了x<=10.

下面是Lisp中使用do循环的完整代码,定义了一个测试函数叫do-test,为了让输出更加清晰,在do循环前后分别加了一行输出。

(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~%"))

[转] Lisp语言:Do循环的使用的更多相关文章

  1. 【下载分】C语言for循环语句PK自我活动

    想了解自己C语言for语句的掌握程度吗?敢和自己PK较量一番吗?參加"C语言for循环语句PK自我活动",仅仅要成绩70分以上.就可赢得CSDN下载分. 12道题目题库动态读取,每 ...

  2. 为什么Lisp语言如此先进?(译文) - 阮一峰的网络日志

      为什么Lisp语言如此先进?(译文) - 阮一峰的网络日志 为什么Lisp语言如此先进?(译文)

  3. [R] R语言for循环机制

    在做数据分段截取的时候,发现for循环的表现和其他语言不太一样. 上代码: :) { i = i + print(i) } 结果: [] [] [] [] 即作为循环计次的i, 并不会因为在循环体中的 ...

  4. 转-为什么Lisp语言如此先进?(译文)

    之前在看黑客与画家的时候看过,今天重温,完全不一样的感觉! 原文地址:http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html ...

  5. Lisp语言简介

    摘自维基百科,原链接为:http://zh.wikipedia.org/zh/LISP 因为Clojure是Lisp的一种的方言,所以我们可以先来了解一下Lisp这个比较小众的编程到底是什么~ --- ...

  6. LISP语言学习资源

    LISP的介绍:Paul Graham 的主页 http://paulgraham.com/index.html Lisp之根源 - 保罗·格雷厄姆 http://daiyuwen.freeshell ...

  7. C 语言实例 - 循环输出26个字母

    C 语言实例 - 循环输出26个字母 循环输出 个字母. 实例 #include <stdio.h> int main() { char c; for(c = 'A'; c <= ' ...

  8. Django 模板语言 for循环

    Django 模板语言 for 循环 ******  for 循环字典 ********** USER_DICT = { 'k1':'root1', 'k2':'root2', 'k3':'root3 ...

  9. [ Skill ] 为什么 Lisp 语言如此先进

    https://www.cnblogs.com/yeungchie/ 网上看到一个应该是 2002 年的文章 译文转自:为什么Lisp语言如此先进?(译文) - 阮一峰的网络日志 原文地址:Reven ...

随机推荐

  1. Core Data (2)-备用

    1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以后的版本中 ...

  2. (转)syslog日志等级

    设施.优先级”(facility.priority)设施(facility): kern 0 内核日志消息 user 1 随机的用户日志消息 mail 2 邮件系统日志消息 daemon 3 系统守护 ...

  3. java设计模式--结构型模式--外观模式

    外观模式 概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不 ...

  4. 关于UIButton中的ContentEdgeInsets的深入研究

    UIButton的contentEdgeInsets属性的深入研究 由于用UIButton这个属性做过一些东西,但是对它的规律始终不太了解,虽然苹果官方文档的解释大体上可以理解为,这个属性设置的是内边 ...

  5. Linux Java的环境变量搭建

    JAVA JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载完后,解压完并将其中的jdk文件夹移动到/u ...

  6. 【转】Linux下编译ffmpeg

    1.下载ffmpeg.下载网址:http://www.ffmpeg.org/download.html 2.解压缩tar -zxvf ffmpeg-2.0.1.tar.gz 3.配置,生成Makefi ...

  7. hdu 5335 Walk Out(bfs+寻找路径)

    Problem Description In an n∗m maze, the right-bottom corner or a written on it. An explorer gets los ...

  8. qt简单界面更新代码(菜鸟级)(部分代码)

    qt简单界面更新代码(菜鸟级)(部分代码)self.timers_1=QtCore.QTimer(self)self.timers_1.timeout.connect(self.min_1)self. ...

  9. 文件读写IO

    摘要:本文主要总结了以下有关文件读写的IO,系统调用与库函数. 1.初级IO函数:close,creat,lseek,open,write 文件描述符是一个整型数 1.1close 1.2int cr ...

  10. (3)选择元素——(5)为项目列表加样式(Styling list-item levels)

    Let's suppose that we want the top-level items, and only the top-level items, to be arranged horizon ...