typestar

Cadenas y números en Lisp

Unir cadenas y dividir números, donde Lisp conserva respuestas exactas por defecto.

;; concatenate wants its result type spelled out before the pieces
(defparameter *artist* "brian eno")
(defparameter *track* "an ending")

(defun title-line (artist track)
  (concatenate 'string
               (string-upcase artist)
               " - "
               (string-capitalize track)))

;; / keeps an exact ratio, floor truncates, float widens to a decimal
(defparameter *seconds* 262)

(format t "~a~%" (title-line *artist* *track*))
(format t "exact minutes: ~a~%" (/ *seconds* 60))
(format t "whole minutes: ~a with ~a left over~%"
        (floor *seconds* 60) (mod *seconds* 60))
(format t "rounded off: ~,2f~%" (float (/ *seconds* 60)))

Cómo funciona

  1. title-line pega cuatro piezas con concatenate, que necesita el tipo de resultado 'string por delante.
  2. (string-upcase artist) y (string-capitalize track) recapitalizan sin tocar los originales.
  3. (/ *seconds* 60) devuelve la razón exacta, mientras floor y mod la parten y float da un decimal.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
597
Tokens
86
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 69 segundos.

Escribe este fragmento

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

← Anterior Siguiente →