快速业务通道

使用Cusp Eclipse插件开发Lisp应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
三个元素

(defun concat3 (args_list)   (concat2 (car args_list)       (concat2 (car (cdr args_list))            (car (cdr (cdr args_list))))))

注,此函数仍使用 concat2 函数,但是使用参数列表作为输入。注意如何从 args_list 检索连接的各个部分。car 将从列表中获取第一个元素。cdr 将返回 减去第一个元素的列表。只需对列表调用 car 函数就可以看到如何获得第一个 元素。获得第二个元素要求对列表调用 cdr,然后对新列表调用 car。通过对列 表两次调用 cdr 并对得到的列表调用 car 获取第三个元素。

导出后以上函数的输出为:

COMMON-LISP-USER> (my_new_lisp_project:concat3 ''("howd" "y h" "o")) "howdy ho"

就是这样。已正确连接了三个字符串来生成 "howdy ho"。接下来,创建递归 函数。

使用 Lisp 递归

将要创建的最后一个函数要执行一些递归操作,这是使用 Lisp 进行列表处 理的真正强大之处。迭代是可能实现的(逐个遍历所有条目),但是不同于诸如 Java 语言之类的普通语言,递归是到现在为止 Lisp 中处理列表的最简单方法 。在本节的末尾,您将明确了解递归的含义。

首先创建递归的 concat 函数。

清单 2. 递归连接(无限制的参数)

1  (defun concat_recursive (args_list) 2   (if (equal (cdr args_list) nil) 3     (car args_list) 4     (concat2 (car args_list) 5         (concat_recursive (cdr args_list)))))

递归是十分难于处理的概念,因此让我们一起来查看这个概念:

假定将任意参数列表传递给上面的函数。

如果列表中只有一个元素(第 2 行中的 (cdr args_list) 部分返回 nil) ,则返回单个元素(第 3 行中的 (car args_list))。

如果列表中有多个元素(意味着第 2 行中的 (cdr args_list) 部分未返回 nil),则返回使用 (cdr args_list) 的结果作为参数(参见第 5 行)连接( 使用 concat2)列表的第一个元素(参见第 4 行)与递归调用 concat_recursive 的结果的结果。

当传递列表 ''("ho" "wd" "y" "h" "o") 作为参数时,下面是递归输出:

第一次执行到第 2 行时,if 语句为 false,并用 "ho" 和 (concat_recursive ''("wd" "y" " h" "o")) 调用 concat2。

第二次执行到第 2 行时,if 语句又为 false,并用 "wd" 和 (concat_recursive ''("y" " h" "o")) 调用 concat2。

第三次执行到第 2 行时,if 语句又为 false,并用 "y" 和 (concat_recursive ''(" h" "o")) 调用 concat2。

第四次执行到第 2 行时,if 语句又为 false,并用 " h" 和 (concat_recursive ''("o")) 调用 concat2。

第五次递归结束。这是因为这一次,第 2 行中的 if 语句现在为 true,并 且简单地返回了 "o"。递归解开为:

第四次:连接并返回 "h" 和 "o"。

第三次:连接并返回 "y" 和 "ho"。

第二次:连接并返回 "wd" 和 "y ho"。

第一次:连接并返回 "ho" 和 "wdy ho" 作为最终结果。

这时就完成了递归 —— "howdy ho" 最终被返回,如下所示:

COMMON-LISP-USER> (my_new_lisp_project:concat_recursive ''("ho" "wd" "y" " h" "o")) "howdy ho"

已经将递归添加到了 Cusp 开发工具库中。接下来请尝试调试器。

使用Cusp Ecl

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号