我写了这个函数
(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)))
答案 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)