使用 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】:您需要引用列表,这样它就不会被视为函数调用。
defund
是 defun
的拼写错误,您缺少一个右括号。
(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]列表切片?