我正在尝试编写Lisp函数以从列表(包含整数,字符等)中返回字符列表(无重复)。我仍然是Lisp的初学者,开始时遇到麻烦。我们的教授提到使用原子,但我不明白她的意思。这是问题:
“编写一个接受列表作为输入参数的lisp函数(列表由整数,小数, 字符和嵌套列表),并创建一个包含原始列表中所有字符的列表,不包含任何字符 复制。示例程序输出如下所示:
答案 0 :(得分:2)
您的作业所谓的“字符”实际上是名称长度为1的符号。似乎您可以在脑海中将“字符”一词替换为“符号”并使用它。
原子是任何不是缺点的东西-任何非空列表都由一系列缺点组成。例如,符号,数字,字符串和nil
是原子。
一个缺点(实际上是一个缺点单元格)是一个简单的数据结构,可以容纳两件事。在列表中,每个缺点的第一件事是某个列表元素,第二个缺点是指向下一个缺点的指针或nil。您也可以将列表作为列表元素。那么第一件事就是指向列表的指针。这将正式成为一棵树。缺点的第一件事的访问者函数称为car
或first
,另一件事的访问者函数称为cdr
或rest
。 Car
和cdr
有点陈旧,主要在将cons单元视为树节点时使用,而first
和rest
更现代,并且主要用于您将cons单元格视为列表链链接。
您可以使用函数atom
测试事物是否是原子。如果它不是原子,则它是一个至少包含一个元素的列表。
您的作业包括以下几个部分:
一个有用的习惯用法是使用push
或pushnew
,它们将新元素放在列表的前面,并在列表reverse
的末尾。