typestar

defclass en Lisp

Una clase de CLOS deletrea a mano el :initarg, el :accessor y el :initform de cada ranura.

;; Shape classes with initargs, accessors, and initform defaults.

(defclass shape ()
  ((name :initarg :name :accessor shape-name :initform "shape")
   (sides :initarg :sides :accessor shape-sides :initform 0)))

(defclass rectangle (shape)
  ((width :initarg :width :accessor rectangle-width :initform 1)
   (height :initarg :height :accessor rectangle-height :initform 1)))

(defvar *card* (make-instance 'rectangle :name "index card"
                                         :sides 4 :width 5 :height 3))

(setf (rectangle-height *card*) 4)

(format t "~a has ~d sides and area ~d~%"
        (shape-name *card*) (shape-sides *card*)
        (* (rectangle-width *card*) (rectangle-height *card*)))

Cómo funciona

  1. shape nombra dos ranuras; rectangle las hereda y agrega width y height.
  2. make-instance pasa :name, :sides, :width y :height como initargs.
  3. Los accesores leen y escriben: (setf (rectangle-height *card*) 4) actualiza la ranura en el lugar.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
633
Tokens
102
Ritmo de tres estrellas
70 tpm

Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 87 segundos.

Escribe este fragmento

Paso 2 de 3 en Estructuras y CLOS; paso 20 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →