5

我写了函数

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

但它不起作用。Elisp回溯消息是:

调试器进入--Lisp 错误: (wrong-type-argument stringp str1)

我怎样才能让它工作?

PS:以下修改版本完美运行,但我需要原始版本

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

3 回答 3

16

运算符(撇号quote是语法糖)意味着它的参数不被评估,即(quote (str1 str2))返回两个符号的列表。改用list(list str1 str2).

于 2009-01-28T11:31:40.363 回答
6

建立一个值列表:

(defun test ()
  (let ((str1 "foo") (str2 "bar"))
    (loop for s in (list str1 str2) do (message s))))
于 2009-01-30T22:15:22.493 回答
3

尝试:

`(,str1 ,str2)
于 2009-01-28T10:58:52.177 回答