|
不懂,看看有用没
您将创建一种分别处理每 个 列表元素的方法,这是 Lisp 的真正强大之处。定义如下:
(defmethod concat2 ((str1 string) (str2 string))
(concatenate'string str1 str2))
注意,以上方法实际上定义了一个类型 字符 串 。到现在为止,您一直在使用 Lisp 作为一种大型的无类型语言。虽然双引号隐式地把数据类型定义为 字符 串 ,但是以上方法显式地把 concat2 函数的输入和输出类型定义为 字符 串 。此方法还使用内置的 concatenate 函数把 两 个 字符 串 组合在一起,并将其作为单个 字符 串 返回。
要测试 concat2,请将其导出,然后键入 (my_new_lisp_project:concat2"howd""y ho")。输出如下:
清单 7. 连接 两 个 字符 串 的输出
COMMON-LISP-USER>
(my_new_lisp_project:concat2"howd""y ho")
"howdy ho"
完成。 字符 串 "howd"和"y ho"变成"howdy ho"。现在您将使用 两 个 著名的 Lisp car 和 cdr 函数创建更通用化的 concatenation 函数。
清单 1. 连接 列表中的三 个 元素
(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 获取第三 个 元素。 |
|