使用 Lisp:编写一个名为 myList 的 Common Lisp 函数,它创建以下列表并返回它

Posted

技术标签:

【中文标题】使用 Lisp:编写一个名为 myList 的 Common Lisp 函数,它创建以下列表并返回它【英文标题】:Using Lisp: Write a Common Lisp function named myList which creates the following list and returns it 【发布时间】:2020-10-26 23:51:32 【问题描述】:

这是给出的列表:

(4 (7 22) "art" ("math" (8) 99) 100)

但我仍然无法想出正确的代码来回答这个问题

我想出的只是

(defund myList() (4 (7 22) "art" ("math" (8) 99 100) ) 

但显然这是不正确的

【问题讨论】:

【参考方案1】:

您需要引用列表,这样它就不会被视为函数调用。

defunddefun 的拼写错误,您缺少一个右括号。

(defun myList()
  '(4 (7 22) "art" ("math" (8) 99 100)))

如果您需要非常量数据,请使用LIST 函数在每个级别创建新列表。

(defun myList ()
  (list 4 (list 7 22) "art" (list "math" (list 8) 99 100)))

【讨论】:

您可能会争辩说这不会创建一个列表:(eq (mylist) (mylist)) 将是真的。原问题是否担心,我不知道。 同意引用的列表既危险又不太可能成为教学目标。我怀疑他们正在寻找 CONS 的精确用法。 @kennytilton 我添加了创建新列表的代码。 很好,但通常这样的说明包括“...不使用 LIST”。在这种情况下,目标是通过使用 CONS 让您更深入地了解列表结构。例如,使用 COND 创建列表(42) 的方法是(CONS 42 nil)。创建列表(1 2) 非常棘手:(CONS 1 (CONS 2 nil))。 Tbh,LIST 是语法糖!很快你就需要在处理列表时看到过去的糖。 hth. 如果有额外的限制问题需要这样说。

以上是关于使用 Lisp:编写一个名为 myList 的 Common Lisp 函数,它创建以下列表并返回它的主要内容,如果未能解决你的问题,请参考以下文章

是否有一个简洁的emacs lisp相当于Python的[n:m]列表切片?

预处理器中的 C# 宏定义

如何更改列表中的每个元素?

Visual Lisp:如何调用外部 C++ DLL 中的函数

python 编写排列组合

什么是“编写其他程序的Lisp程序”?