目前,我有以下列表:
(define globals '((objects test)))
其变量的名称存储在另一个 alist 中:
(define test '((loc globals) (other properties)))
我想轻松检索全局对象列表。我首先尝试了这段代码。
(assoc 'objects
(cadr (assoc 'loc
test)))
但是,这吐出了一个错误:
错误:在程序关联中:位置 2 中的类型参数错误(期望关联列表):全局变量
我搜索并找到了这个问题,所以我尝试使用 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"))