2014-09-01 108 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

相關問題