typestar

Argumentos por palabra clave en Lisp

Una función brew-tea con tres parámetros &key, llamada de tres maneras.

;; &key parameters are passed by name, so a caller can skip any of
;; them and give the rest in whatever order reads best.
(defun brew-tea (leaves &key (minutes 3) (celsius 95) milk)
  "Describe a cup of tea brewed from LEAVES."
  (format nil "~a: ~a min at ~a C~:[~; with milk~]"
          leaves minutes celsius milk))

;; Every keyword the call omits falls back to its default.
(defvar *plain* (brew-tea "sencha"))
(defvar *strong* (brew-tea "assam" :minutes 5 :milk t))

;; The callee does not care what order the keywords arrive in.
(defvar *cool-cup* (brew-tea "gyokuro" :celsius 60 :minutes 2))

(format t "~a~%~a~%~a~%" *plain* *strong* *cool-cup*)

Cómo funciona

  1. (defun brew-tea (leaves &key (minutes 3) (celsius 95) milk) da valor por defecto a dos claves y deja milk en nil.
  2. (brew-tea "sencha") omite todas las claves, así que aplican los tres valores por defecto.
  3. (brew-tea "gyokuro" :celsius 60 :minutes 2) las pasa fuera del orden declarado, y eso no le importa a la función.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
15
Caracteres a escribir
642
Tokens
71
Ritmo de tres estrellas
70 tpm

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

Escribe este fragmento

Paso 2 de 3 en Funciones; paso 11 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →