Lisp语言:循环控制
了解了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 '(a b c d e f g))
- (loop for i in i-list do
- (format *query-io* "~a " i))
- )
上面的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的时候就会退出循环:
- (defun looptest3 ()
- (setq i 1)
- (loop while (< i 10) do
- (format *query-io* "*")
- (setq i (+ i 1)))
- )
而下面这种是do until循环,循环一直执行直到i大于10,同样在循环体内对i进行累加,使i最终满足大于10的条件:
- (defun looptest4 ()
- (setq i 1)
- (loop until (> i 10) do
- (format *query-io* "*")
- (setq i (+ i 1)))
- )
下面是程序执行过程的截图,列出上面4个方法调用的结果。
细心的读者可以数一数其中的星号个数,想一想为什么几个方法输出的星号个数会不同。
Lisp语言:循环控制相关推荐
- 你不可不知的9种Lisp语言思想
本文来源 Lisp语言诞生的时候就包含了9种新思想.其中一些我们今天已经习以为常,另一些则刚刚在其他高级语言中出现,至今还有2种是Lisp独有的.按照被大众接受的程度,这9种思想依次如下排列. (1) ...
- Lisp语言: 在Windows下搭建CLisp环境
有关Clisp环境的搭建,有人反映说在Ubuntu上搭建很麻烦,对于习惯使用Windows环境的同学们来讲不方便,所以在这里添加一篇Windows下搭建CLisp环境的文章. 其实在Windows下搭 ...
- Common Lisp语言快速入门
zhezhelin Common Lisp语言快速入门 Lisp是软件领域的分裂力量.一方面,Lisp爱好者誓言Lisp比软件领域内的其它语言都更加快捷.整洁和强大:而反对者则辩称,不可靠的执行和库支 ...
- 1971 John McCarthy--人工智能之父和LISP语言的发明人(ZT)
1971年的图灵奖授予提出"人工智能"这一术语并使之成为一个重要的学科领域的斯坦福大学 教授约翰. 麦卡锡( John McCar- thy). 麦卡锡1927年9月4日生于波士顿 ...
- lisp用entmake生产圆柱体_使用lisp语言实现在平面图中自动画出桥梁的墩柱标识.doc...
使用lisp语言实现在平面图中自动画出桥梁的墩柱标识.doc 还剩 5页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 使用 LISP 语言实现在平面图 ...
- lisp语言是最好的语言_Lisp可能不是数据科学的最佳语言,但是我们仍然可以从中学到什么呢?...
lisp语言是最好的语言 This article is in response to Emmet Boudreau's article 'Should We be Using Lisp for Da ...
- lisp语言代替python_Lisp 语言优点那么多,为什么国内很少运用?
为什么Lisp没有流行起来 本文探讨的是为什么Lisp语言不再被广泛使用的. 很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面.现在,它很少被用到,这一切并不是因为古老,类似古老的 ...
- lisp语言cond和if套用_LISP语言入门(CLISP)
曾经翻译整理的一篇LISP语言的入门文章,与大家分享. (请勿转载) ---------------------------------------------------------------- ...
- lisp语言与python_Lisp 语言优点那么多,为什么国内很少运用?
为什么Lisp没有流行起来 本文探讨的是为什么Lisp语言不再被广泛使用的. 很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面.现在,它很少被用到,这一切并不是因为古老,类似古老的 ...
最新文章
- C代码生成图片:BMP、PNG和JPEG
- “中文四六级”考试来了!《国际中文教育中文水平等级标准》发布
- leetcode-217-存在重复元素
- SAP ABAP Netweaver里进程能够申请的最大内存
- [剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]
- include和require区别
- 机器学习PAI快速入门
- 【动态规划笔记】背包问题:搬寝室
- pytorch---在训练中动态的调整学习率
- Http和RPC区别
- (转)宅男程序员福利:来自纽约的28位智慧与美貌并存的IT女神
- android studio 使用xml:app命名空间代码不提示问题
- 演示文稿 Beamer 入门
- iOS更新之DFU模式和恢复模式
- 如何恢复类视图中突然消失的类已经编程辅助工具VISUAL ASIST
- Windows10数据线连接坚果手机SmartisanTNT
- C++ 加号运算符重载
- Trias技术丨关于椭圆曲线密码学的探究
- ResNet DenseNet(原理篇)
- 小程序canvas文字信息绘制图片,模拟器正常保存图片,真机无法保存图片报错downloadFile:fail downloadFile protocol must be http or https
热门文章
- 秋招在即,你准备好了吗?BAT算法工程师面试经验分享。
- 计算机考试ppt应用,职称计算机考试辅导:Powerpoint使用母版
- 计算机二级考试进制转换可以用计算机嘛,2016年计算机二级考试题中有关进制转换和编码问题...
- 理“ Druid 元数据”之乱
- java ca 验证失败,Apache CURL错误SSL:CA证书集,但禁用证书验证
- 遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)
- 小白虎远程控制软件待实现功能以及用户反馈! 请大家及时反馈需要完善的地方!
- pyltp的初始化报错:segmentor = Segmentor() # 初始化实例TypeError: __init__(): incompatible constructor argument
- excel vba如何在不打开的情况下获取.pdf文件的打印页码数
- SANGFOR SCSA——Windows系统基础