循环遍历Lisp中的变量

时间:2009-01-28 10:46:07

标签: lisp elisp

我写了这个函数

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

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

  

调试器已输入 - Lisp错误:(错误类型参数stringp str1)

我怎样才能让它发挥作用?

P.S。:以下修改版本运行完美,但我需要原始版本

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

3 个答案:

答案 0 :(得分:16)

quote运算符(撇号是语法糖)表示不对其参数求值,即(quote (str1 str2))返回两个符号的列表。请改为使用list(list str1 str2)

答案 1 :(得分:6)

建立值列表:

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

答案 2 :(得分:3)

尝试:

`(,str1 ,str2)