Как я могу установить имя глобальной переменной по приглашению? - PullRequest
0 голосов
/ 05 февраля 2019

Чтобы определить класс ( для школьного проекта, который реализует классы и объект ), я должен дать им имя из приглашения при создании класса с помощью метода 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 является переменной, и ему следует оценить это, чтобы принять значение.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Неясно, что вы хотите сделать.Но несколько замечаний:

  • 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))))
0 голосов
/ 06 февраля 2019
(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
...