为了定义一个班级(用于实现班级和对象的学校项目的 ),当我使用方法def-class class-name parents ...
创建班级时,我必须在提示符下给他们一个名称
提示应以CLASS-NAME
答复我,以告诉我该类已保存为全局变量( class是参数列表)。
所以在代码中,我认为我应该写这样的东西:
(defun def-class (class-name parents slot-value)
(defparameter X (list '(class-name parents slot-value))))
其中X必须为CLASS-NAME
。
但是,如果我尝试写那个变量名,就会从字面上给我我在代码中写的单词,就像它不能识别X是变量,它应该对其进行评估以获取值。
答案 0 :(得分:1)
目前尚不清楚您想做什么。但有几点要注意:
defparameter
通常是用于定义全局变量的顶级形式。通常在函数内部不使用它。要设置变量,请使用setf
或setq
。
defvar
和defparameter
引入的变量应写为*var*
,而不是var
。这样可以确保它们不会与词法变量发生冲突。
引用的数据将不被评估。如果要基于计算值(如变量值)创建列表,请使用函数list
。
代码:
(defun def-class (class-name parents slot-value)
(setf *x* (list (list class-name parents slot-value))))
答案 1 :(得分:0)
(defclass myclass ()
((slot-1 :initarg :slot-1 :accessor slot-1)
(slot-2 :initarg :slot-2 :accessor slot-2)))
;;#<STANDARD-CLASS MYCLASS>
(defparameter mc (make-instance 'myclass :slot-1 'a :slot-2 'b))
;; MC
(slot-1 mc)
;; A
(slot-2 mc)
;; B