typestar

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

  1. defparameter nombra un global; el segundo (defvar *adjustments* 99) se ignora porque el nombre ya está vinculado.
  2. Los asteriscos vuelven especiales a ambos nombres: report-target y bump-target los alcanzan sin argumentos.
  3. bump-target reasigna con setf y cuenta la llamada con incf.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Valores y vinculaciones; paso 1 de 27 en Fundamentos del lenguaje.

Siguiente →