2009-01-28 265 views
5

我寫的函數遍歷變量在Lisp中

(defun test() 
    (let ((str1 "foo") (str2 "bar")) 
    (loop for s in '(str1 str2) do (message s)))) 

,但它不工作。在elisp的回溯消息是:

Debugger entered--Lisp error: (wrong-type-argument stringp str1)

我怎樣才能使它發揮作用?

PS:以下修改後的版本完美的作品,但我需要的原始版本

(defun test1() 
    (loop for s in '("asdf" "fdsa") do (message s))) 

回答

16

quote運算符(其中撇號是語法糖),意味着其參數未被評估,即(quote (str1 str2))返回兩個符號列表。改爲使用list(list str1 str2)

3

嘗試:

`(,str1 ,str2) 
+3

有點複雜 - 一個simeple (名單STR1 STR2) 會做的一樣好 – 2009-01-28 14:50:44

6

構建值的列表:

(defun test() 
    (let ((str1 "foo") (str2 "bar")) 
    (loop for s in (list str1 str2) do (message s))))