defparameter y defvar en Lisp
Dos formas de crear un global: defparameter sobrescribe, defvar se abstiene.
;; defparameter always assigns; defvar only sets a name that is unbound
(defparameter *thermostat-target* 68)
(defvar *adjustments* 0)
(defvar *adjustments* 99)
;; earmuffs flag a special variable, visible inside every function below
(defun report-target ()
(format t "target is ~a degrees~%" *thermostat-target*))
(defun bump-target (degrees)
(setf *thermostat-target* (+ *thermostat-target* degrees))
(incf *adjustments*))
(report-target)
(bump-target 4)
(report-target)
(format t "adjustments so far: ~a~%" *adjustments*)
Cómo funciona
defparameternombra un global; el segundo(defvar *adjustments* 99)se ignora porque el nombre ya está vinculado.- Los asteriscos vuelven especiales a ambos nombres:
report-targetybump-targetlos alcanzan sin argumentos. bump-targetreasigna consetfy cuenta la llamada conincf.
Palabras clave y builtins usados aquí
defparameterdefundefvarformatincfsetf
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 527
- Tokens
- 65
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 52 segundos.
Paso 1 de 3 en Valores y vinculaciones; paso 1 de 27 en Fundamentos del lenguaje.