创建作为LISP中函数的参数传递的列表列表

时间:2014-09-01 07:43:37

标签: list lisp common-lisp

我正在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))

1 个答案:

答案 0 :(得分:3)

您正在获取文字列表,因为您正在引用它。您需要在函数调用中引用变量来创建新列表。

(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指定全局变量。