read
ing中に(他のアクションの中でも)ハッシュテーブルを作成しようとしています。ハッシュテーブルに(まだ)グローバルスコープを持たせたくないので、マクロとを使用してこれを実行していgensym
ます。マクロ内で、に似x
たマクロを定義していますが、どこかにシンボルを定義する代わりに、ハッシュテーブルのエントリを定義しています。爆破します。エラーメッセージは理解できたと思いますが、どうすれば機能させることができますか?s
setf
コード:
#!/usr/bin/clisp -repl
(defmacro x (&rest statements)
(let ((config-variables (gensym)))
`(macrolet ((s (place value)
(setf (gethash 'place ,config-variables) value)))
(let ((,config-variables (make-hash-table :test #'eq)))
(progn ,@statements)
,config-variables))))
(defun load-config ()
(let ((config-file-tree (read *standard-input*)))
(eval config-file-tree)))
(defun load-test-config ()
(with-input-from-string (*standard-input* "(x (s fred 3) (s barney 5))")
(load-config)))
(load-test-config)
出力:
*** - LET*: variable #:G12655 has no value
The following restarts are available:
USE-VALUE :R1 Input a value to be used instead of #:G12655.
STORE-VALUE :R2 Input a new value for #:G12655.
SKIP :R3 skip (LOAD-TEST-CONFIG)
STOP :R4 stop loading file /u/asterisk/semicolon/build.l/stackoverflow-semi