使用Cusp Eclipse插件开发Lisp应用程序 - 编程入门网
三个元素
注,此函数仍使用 concat2 函数,但是使用参数列表作为输入。注意如何从 args_list 检索连接的各个部分。car 将从列表中获取第一个元素。cdr 将返回 减去第一个元素的列表。只需对列表调用 car 函数就可以看到如何获得第一个 元素。获得第二个元素要求对列表调用 cdr,然后对新列表调用 car。通过对列 表两次调用 cdr 并对得到的列表调用 car 获取第三个元素。 导出后以上函数的输出为:
就是这样。已正确连接了三个字符串来生成 "howdy ho"。接下来,创建递归 函数。 使用 Lisp 递归 将要创建的最后一个函数要执行一些递归操作,这是使用 Lisp 进行列表处 理的真正强大之处。迭代是可能实现的(逐个遍历所有条目),但是不同于诸如 Java 语言之类的普通语言,递归是到现在为止 Lisp 中处理列表的最简单方法 。在本节的末尾,您将明确了解递归的含义。 首先创建递归的 concat 函数。 清单 2. 递归连接(无限制的参数)
递归是十分难于处理的概念,因此让我们一起来查看这个概念: 假定将任意参数列表传递给上面的函数。 如果列表中只有一个元素(第 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" 最终被返回,如下所示:
已经将递归添加到了 Cusp 开发工具库中。接下来请尝试调试器。 使用Cusp Ecl |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |