循环遍历Lisp中的变量

Ole*_*liv 5 lisp elisp

我写了这个函数

(defun test ()
  (let ((str1 "foo") (str2 "bar"))
    (loop for s in '(str1 str2) do (message s))))
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能使它工作?

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

(defun test1 ()
  (loop for s in '("asdf" "fdsa") do (message s)))
Run Code Online (Sandbox Code Playgroud)

Sva*_*nte 16

quote操作者(对于该撇号是语法糖)指其参数不被评估,即,(quote (str1 str2))返回两个列表的符号.请list改用:(list str1 str2).


小智 6

构建值列表:

(defun test ()
  (let ((str1 "foo") (str2 "bar"))
    (loop for s in (list str1 str2) do (message s))))
Run Code Online (Sandbox Code Playgroud)