Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Evaluación condicional
La primera expresión para la que la prueba resulte ser cierto (cualquier cosa salvo #f
cuenta como cierto) será evaluada. Si todas las pruebas resultan ser #f, se evalúa la
cláusula else.
(cond...
(test => expr)
...)
En este caso, expr debe resultar en una función que toma un solo argumento. Si test
resulta ser cierto, se llama a la función anterior con el valor devuelto por test.
pero se usa mucho menos porque cond es más general y normalmente resulta más
legible.
Bucles
Los bucles en Scheme suelen tomar la forma de una recursión final. Un ejemplo clásico
es la función factorial, que puede definirse sin recursión final como:
(define (factorial n)
(cond ((= n 0) 1)
(else (* n (factorial (- n 1))))))
(factorial 5)
;; => 120
o una función de orden superior como map, que aplica una función a cada elemento de
una lista, puede también definirse sin recursión final de la siguiente forma:
(define (factorial n)
(let loop ((fact 1)
(n n))
(cond ((= n 0) fact)
(else (loop (* n fact) (- n 1))))))
(factorial 5)
;; => 120
Adviértase que en ambos casos se prefiere la versión con recursión final debido a su
menor uso de espacio.
Entrada/salida
Scheme tiene el concepto de puertos de donde leer o a los que escribir. Scheme define
tres puertos por defectos, accesibles con las funciones current-input-port, current-
output-port y current-error-port.
Hola Mundo
(let ((hola-mundo
(lambda ()
(display "Hola, mundo")
(newline))))
(hola-mundo))
o, simplemente
"Hola, mundo"