我正在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))
答案 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
指定全局变量。