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

时间:2019-02-05 11:00:27

标签: parameters compiler-errors global-variables common-lisp

为了定义一个班级(用于实现班级和对象的学校项目的 ),当我使用方法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是变量,它应该对其进行评估以获取值。

2 个答案:

答案 0 :(得分:1)

目前尚不清楚您想做什么。但有几点要注意:

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

  • defvardefparameter引入的
  • 变量应写为*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