2009-01-28 16 views
5

me escribió la funciónbucle sobre las variables en Lisp

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

pero no funciona. El Backtrace mensaje Elisp es:

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

¿Cómo puedo hacer que funcione?

PS: la siguiente versión modificada funciona perfectamente, pero necesito la versión original

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

Respuesta

16

El quote operador (por lo que el apóstrofe es el azúcar sintáctica) significa que su los argumentos no se evalúan, es decir, (quote (str1 str2)) devuelve una lista de dos símbolos . Use list en su lugar: (list str1 str2).

3

intento:

`(,str1 ,str2) 
+3

un poco complejo - un (str2 lista str1) simeple haría así –

6

Construir una lista de los valores:

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