【问题标题】:Loop over variables in Lisp在 Lisp 中循环变量
【发布时间】:2009-01-28 10:46:06
【问题描述】:

函数是我写的

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

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

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

我怎样才能让它工作?

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

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

【问题讨论】:

    标签: lisp elisp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      建立一个值列表:

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

      【讨论】:

        【解决方案3】:

        尝试:

        `(,str1 ,str2)
        

        【讨论】:

        • 有点复杂——一个simeple(list str1 str2)也可以
        猜你喜欢
        • 1970-01-01
        • 2019-09-29
        • 2019-07-12
        • 1970-01-01
        • 2018-05-24
        • 2011-06-18
        • 2013-03-10
        相关资源
        最近更新 更多