了解了Lisp语言的条件判断,让我们看看Lisp语言的循环控制。对于稍有编程经验的人来说,循环是比较容易理解的,一般语言里面的循环无外乎for循环,while循环,do until循环等,有些语言的循环稍微复杂一点,也不过是一些变化形式。而Lisp语言里的循环却不是这么简单,查找Lisp中loop的使用就可以发现一系列的资料,有关于loop的简单使用的,有关于loop的高阶使用的,仔细看起来会觉得学习loop的使用都像是在学习一门语言,而不是某中语言的一个关键字。究其根源,loop其实是一个宏,是Lisp自我扩展的结果。有关于宏的深入了解不是短短一篇文章可以完成的,也不是本文的目的,这里暂时不作讨论。

在不讨论宏的情况下,我们可以用一种简单的方法来学习Lisp中的循环,就是列出一些常用的,容易理解的loop循环,直接当标准语法记住,就如同我们记住其它语言的for循环一样。

Lisp中的for循环使用样例如下:

[plain] view plaincopy
  1. (defun looptest1 ()
  2. (loop for i from 1 to 10  do
  3. (format *query-io* "*"))
  4. )

上面循环语句的作用类似于c语言的for (i=1 ;i < = 10 ;i++)。

执行的结果是循环输出*号。

Lisp中还用一种常用的loop循环是遍历一个列表,样例如下:

[plain] view plaincopy
  1. (defun looptest2 ()
  2. (setq i-list '(a b c d e f g))
  3. (loop for i in i-list  do
  4. (format *query-io* "~a  " i))
  5. )

上面的Lisp语句设置变量i-list的值为列表(a b c d e f g),注意列表前面的单引号',这个符号表明后面的列表不要进行计算,这样这个列表才能保持原样赋予变量i-list。否则运行时Clisp会尝试执行( a b c d e f g),认为a是一个函数,就会报错。

然后loop循环会遍历i-list这个列表,将i-list列表中的每一个值赋予变量i,然后进入循环体,以上语句会依次输出“ A  B  C  D  E  ”

以上两种loop循环都是由Lisp语言来控制循环的,开发人员不需要考虑步长,循环条件等因素,只需要考虑循环体内完成的工作就可以了。

下面两种循环稍微麻烦一点,需要开发人员控制循环条件,就像平时我们使用while循环和do until循环一样,需要在循环体内修改变量,使循环条件在某种情况下不满足,从而退出循环。

下面的循环是while循环,循环条件是i 小于10,在循环体内对i进行累加,当i大于等于10的时候就会退出循环:

[plain] view plaincopy
  1. (defun looptest3 ()
  2. (setq i 1)
  3. (loop while (< i 10) do
  4. (format *query-io* "*")
  5. (setq i (+ i 1)))
  6. )

而下面这种是do until循环,循环一直执行直到i大于10,同样在循环体内对i进行累加,使i最终满足大于10的条件:

[plain] view plaincopy
  1. (defun looptest4 ()
  2. (setq i 1)
  3. (loop until (> i 10) do
  4. (format *query-io* "*")
  5. (setq i (+ i 1)))
  6. )

下面是程序执行过程的截图,列出上面4个方法调用的结果。

细心的读者可以数一数其中的星号个数,想一想为什么几个方法输出的星号个数会不同。

Lisp语言:循环控制相关推荐

  1. 你不可不知的9种Lisp语言思想

    本文来源 Lisp语言诞生的时候就包含了9种新思想.其中一些我们今天已经习以为常,另一些则刚刚在其他高级语言中出现,至今还有2种是Lisp独有的.按照被大众接受的程度,这9种思想依次如下排列. (1) ...

  2. Lisp语言: 在Windows下搭建CLisp环境

    有关Clisp环境的搭建,有人反映说在Ubuntu上搭建很麻烦,对于习惯使用Windows环境的同学们来讲不方便,所以在这里添加一篇Windows下搭建CLisp环境的文章. 其实在Windows下搭 ...

  3. Common Lisp语言快速入门

    zhezhelin Common Lisp语言快速入门 Lisp是软件领域的分裂力量.一方面,Lisp爱好者誓言Lisp比软件领域内的其它语言都更加快捷.整洁和强大:而反对者则辩称,不可靠的执行和库支 ...

  4. 1971 John McCarthy--人工智能之父和LISP语言的发明人(ZT)

    1971年的图灵奖授予提出"人工智能"这一术语并使之成为一个重要的学科领域的斯坦福大学 教授约翰. 麦卡锡( John McCar- thy). 麦卡锡1927年9月4日生于波士顿 ...

  5. lisp用entmake生产圆柱体_使用lisp语言实现在平面图中自动画出桥梁的墩柱标识.doc...

    使用lisp语言实现在平面图中自动画出桥梁的墩柱标识.doc 还剩 5页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 使用 LISP 语言实现在平面图 ...

  6. lisp语言是最好的语言_Lisp可能不是数据科学的最佳语言,但是我们仍然可以从中学到什么呢?...

    lisp语言是最好的语言 This article is in response to Emmet Boudreau's article 'Should We be Using Lisp for Da ...

  7. lisp语言代替python_Lisp 语言优点那么多,为什么国内很少运用?

    为什么Lisp没有流行起来 本文探讨的是为什么Lisp语言不再被广泛使用的. 很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面.现在,它很少被用到,这一切并不是因为古老,类似古老的 ...

  8. lisp语言cond和if套用_LISP语言入门(CLISP)

    曾经翻译整理的一篇LISP语言的入门文章,与大家分享. (请勿转载) ---------------------------------------------------------------- ...

  9. lisp语言与python_Lisp 语言优点那么多,为什么国内很少运用?

    为什么Lisp没有流行起来 本文探讨的是为什么Lisp语言不再被广泛使用的. 很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面.现在,它很少被用到,这一切并不是因为古老,类似古老的 ...

最新文章

  1. C代码生成图片:BMP、PNG和JPEG
  2. “中文四六级”考试来了!《国际中文教育中文水平等级标准》发布
  3. leetcode-217-存在重复元素
  4. SAP ABAP Netweaver里进程能够申请的最大内存
  5. [剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]
  6. include和require区别
  7. 机器学习PAI快速入门
  8. 【动态规划笔记】背包问题:搬寝室
  9. pytorch---在训练中动态的调整学习率
  10. Http和RPC区别
  11. (转)宅男程序员福利:来自纽约的28位智慧与美貌并存的IT女神
  12. android studio 使用xml:app命名空间代码不提示问题
  13. 演示文稿 Beamer 入门
  14. iOS更新之DFU模式和恢复模式
  15. 如何恢复类视图中突然消失的类已经编程辅助工具VISUAL ASIST
  16. Windows10数据线连接坚果手机SmartisanTNT
  17. C++ 加号运算符重载
  18. Trias技术丨关于椭圆曲线密码学的探究
  19. ResNet DenseNet(原理篇)
  20. 小程序canvas文字信息绘制图片,模拟器正常保存图片,真机无法保存图片报错downloadFile:fail downloadFile protocol must be http or https

热门文章

  1. 秋招在即,你准备好了吗?BAT算法工程师面试经验分享。
  2. 计算机考试ppt应用,职称计算机考试辅导:Powerpoint使用母版
  3. 计算机二级考试进制转换可以用计算机嘛,2016年计算机二级考试题中有关进制转换和编码问题...
  4. 理“ Druid 元数据”之乱
  5. java ca 验证失败,Apache CURL错误SSL:CA证书集,但禁用证书验证
  6. 遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)
  7. 小白虎远程控制软件待实现功能以及用户反馈! 请大家及时反馈需要完善的地方!
  8. pyltp的初始化报错:segmentor = Segmentor() # 初始化实例TypeError: __init__(): incompatible constructor argument
  9. excel vba如何在不打开的情况下获取.pdf文件的打印页码数
  10. SANGFOR SCSA——Windows系统基础