2014-09-01 66 views
1

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

这是我写的代码:

(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)) 
+6

此功能已存在。它被称为'list'。 – 2014-09-01 11:59:41

回答

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分配一个全局变量。

+0

非常感谢你Barmar ...它的工作... – vikram 2014-09-01 08:12:47

+2

@vikram如果这个答案适合你,那么你应该[接受它](http://meta.stackexchange.com/q/5234)。 – 2014-09-01 13:20:58

+0

如果您需要评估每个元素,为什么您会选择使用反引用?我相信对于一个尚未知道引用这个概念的OP来说,这可能会让人困惑。 – Rptx 2014-09-01 16:34:16

相关问题