現在、私は次のalistを持っています:
(define globals '((objects test)))
その変数の名前は、別の連想リストに格納されます。
(define test '((loc globals) (other properties)))
グローバルのオブジェクト リストを簡単に取得したいと考えています。私は最初にこのコードを試しました。
(assoc 'objects
(cadr (assoc 'loc
test)))
ただし、それはエラーを吐き出します:
エラー: プロシージャ assoc 内: 位置 2 の型引数が間違っています (関連リストが必要です): globals
この質問を検索して見つけたので、 eval を使用してみました。
(assoc 'objects
(eval '(cadr (assoc 'loc
test))
(interaction-environment)))
ただし、それは上記と同じエラーを吐き出します! 正しい引数で assoc を呼び出す方法を知っている人はいますか?
編集 (2014-10-27 21:27 EST):すべてのソリューションに感謝します。残念ながら、提出された例は完全なコードでは機能しない可能性があります。
(define-syntax object
(syntax-rules ()
((_ name prop prop* ...)
(begin
(define name '(prop prop* ...))
(let* ((parent (cadr (assoc 'loc name)))
(objref (cdr (assoc 'objects parent))))
(set! parent
(assoc-set! parent
'objects
(append objref '(name)))))))))
(object my-object
(loc globals)
(name "Harry")
(desc "My Object"))