【发布时间】:2015-01-10 15:46:19
【问题描述】:
我还是LISP的初学者,希望大家能给我一些关于如何解决以下问题的建议。
(CG-USER(1):defstruct Test()
(TestValue 10)
(TestChild 'none)
)
TEST
CG-USER(2): (defun testvalue(item)
(slot-value item 'TESTCHILD))
TESTVALUE
CG-USER(3):(setf TestObject(make-Test :TestChild '(TestObject2 B C)))
#S(TEST :NIL NIL :TESTVALUE 10 :TESTCHILD (TESTOBJECT2 B C))
CG-USER(4): (setf TestObject2(make-Test :TestChild '(D E F)))
#S(TEST :NIL NIL :TESTVALUE 10 :TESTCHILD (D E F))
CG-USER(5): (setf aaa (car (testvalue TestObject)))
TESTOBJECT2
CG-USER(6): (testvalue aaa)
Error: The slot TESTCHILD is missing from the object TESTOBJECT2 of class #<BUILT-IN-CLASS SYMBOL> during
operation SLOT-VALUE
[condition type: PROGRAM-ERROR]
以下是我的代码。如您所见,我正在尝试通过函数 testvalue 读取对象 TestObject2 中的详细信息。我的主要目的是能够首先从另一个对象(在本例中为TestObject)确定对象的名称(TestObject2),因为我还不知道名称TestObject2 的名称。
但是,一旦我成功检索到名称 TestObject2 ,当我尝试访问对象内的元素 (TestObject2) 时,它不再识别持有 TestObject2 的变量(在这种情况下,“ aaa") 作为对象。因此,它无法读取它的testvalue,从而导致错误。
我是 LISP 的初学者,我不知道如何解决这个问题。如果有人可以为此提供示例解决方案,那就太好了。谢谢。
P/S:另外,请问这行中的NIL NIL 是什么?有什么办法可以去掉?
#S(TEST :NIL NIL :TESTVALUE 10 :TESTCHILD (D E F))
【问题讨论】:
标签: object lisp common-lisp