【发布时间】:2023-03-02 23:19:01
【问题描述】:
我正在尝试编写一个 Lisp 函数来从列表(包含整数、字符等)中返回一个字符列表(不重复)。我仍然是 Lisp 的初学者,开始时遇到了麻烦。我们的教授提到使用原子,但我不明白她的意思。问题来了:
"编写一个接受列表作为输入参数的 lisp 函数(该列表混合了整数、小数、 字符和嵌套列表)并创建一个列表,其中包括原始列表中的所有字符,没有任何 复制。示例程序输出如下所示:
- ‘((z f) (b a 5 3.5) 6 (7) (a) c) -> (z f b a c)
- ‘( (n) 2 (6 h 7.8) (w f) (n) (c) n) -> (h w f c n) "
【问题讨论】:
-
示例不包含任何字符。它们包含一些符号;这些符号的名称是长度为 1 的字符串。字符
A在(ANSI 通用)Lisp 语法中编码为#\A。哈希反斜杠 A. -
在 Lisp 中,没有“十进制”类型。
3.5是表示 浮点 数的标记。打印的符号是十进制的,但浮点数在内部不是十进制的。有时,新程序员在做数字工作时认为浮点数是十进制的;然后当结果不符合纸笔十进制算术时,他们会感到惊讶。 -
atom是一个函数,如果它的参数不是(非空)列表,则返回t(true)。因此,当遍历一个列表时,它可以用来确定当前元素是否是应该考虑收集的东西(除非已经看到),或者它是否是一个本身应该被遍历的子列表。
标签: lisp common-lisp