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アポストロフィはシンタックス シュガー) は、その引数が評価されないことを意味します。つまり、2 つのシンボル(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 に答える