2009-01-28 219 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))))