如何通过提示设置全局变量的名称?



为了定义一个类(对于实现类和对象的学校项目(,当我使用方法创建类时,我必须从提示符中给它们一个名称 def-class class-name parents ... .

提示应该用CLASS-NAME回复我,告诉我该类已保存为全局变量(类是参数列表(。

所以在代码中,我认为我应该写这样的东西:

(defun def-class (class-name parents slot-value) 
    (defparameter X (list '(class-name parents slot-value))))

其中 X 必须CLASS-NAME 。但是,如果我尝试编写变量的名称,则实际上会给我我在代码中编写的单词,就像它不识别X是一个变量一样,它应该对其进行评估以获取值。

目前还不清楚你想做什么。但有几点意见:

  • defparameter通常是定义全局变量的顶级形式。它通常不在函数内部使用。要设置变量,请使用 setfsetq

  • defvardefparameter 引入的变量应写为 *var* 而不是 var 。这确保了它们不会与词法变量冲突。

  • 引用的数据将不被评估。如果要基于计算值(如变量值(创建列表,请使用例如函数 list

法典:

(defun def-class (class-name parents slot-value) 
  (setf *x* (list (list class-name parents slot-value))))
(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

相关内容

  • 没有找到相关文章

最新更新