【问题标题】:Creating a list of lists passed as arguments to the function in LISP在 LISP 中创建作为参数传递给函数的列表列表
【发布时间】:2023-03-12 17:17:02
【问题描述】:

我正在用 LISP 编写代码,我从用户那里获取 3 个不同的列表作为函数的参数,然后我想创建这些列表的新列表。我尝试了简单的编码,但它没有给我想要的输出.

这是我写的代码:

(defun demo(n1 n2 n3)
  (setq list1 '(n1 n2 n3))
  (print list1))

CL-USER 12 : 5 > (demo '(1 2 3) '(4 5 6) '(7 8 9))
(N1 N2 N3) 
(N1 N2 N3)

当我运行这段代码时,它没有给出列表列表,而是给出了输出:

(n1 n2 n3)

想要的输出是

((1 2 3) (4 5 6) (7 8 9))

【问题讨论】:

  • 这个函数已经存在。它被称为list

标签: list lisp common-lisp


【解决方案1】:

你得到一个文字列表是因为你引用了它。您需要在函数调用中引用变量来创建新列表。

(defun demo (n1 n2 n3)
  (let ((list1 (list n1 n2 n3)))
    (print list1)))

你也可以使用反引号:

(defun demo (n1 n2 n3)
  (let ((list1 `(,n1 ,n2 ,n3)))
    (print list1)))

您还应该使用let 绑定局部变量,而不是使用setq 分配全局变量。

【讨论】:

  • @vikram 如果这个答案对你有用,那么你应该accept it
  • 如果您需要评估每个元素,为什么要选择使用反引号?我相信对于一个还不知道引用这个概念的 OP 来说可能会令人困惑。
  • 我只是展示了不同的做事方式。反引号很有用,因为它允许您以类似于查看文字列表的方式在代码中呈现数据结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
相关资源
最近更新 更多