Parte 1: sistema de tipos
Parte 2: contratos
(define (in-range min max)
(lambda (v)
(and (> v min) (< v max))))
(lambda (n : nat[(in-range 0 10)]) ...)
Esa función sólo acepta un parámetro númerico en el rango ]0;10[.
Parte 3: contratos de orden superior
PLT Scheme tiene un sistema de contratos que permite especificar contratos de orden superior, o sea, contratos sobre funciones. Por ejemplo:
(define foo
(lambda (f : nat[(in-range 0 10)] -> nat[(in-range 20 30)])
...))
La función foo acepta como parámetro una función que debe respetar el hecho de que: dado un parámetro entre 0 y 10, retorna un valor entre 20 y 30.
Analiza cuando es posible verificar cumplimiento de un contrato de orden superior. Notese que en el ejemplo, el contrato sobre el parámetro f puede fallar si (a) f es aplicada con un parametro que no esta entre 0 y 10 (ahi la “culpa” es de quien aplica f), o si (b) dado un parámetro correcto, f no retorna un valor entre 20 y 30 (ahi la “culpa” es de f).
Parte 4 (opcional pregrado / obligatorio posgrado)
Instrucciones
Como siempre, para cada paso entregue código debidamente comentado, con tests y ejemplos ilustrativos.
Para la parte 4, use LaTeX (o algo equivalente, si hay ;)), y entregue un PDF. Si necesita ayuda con LaTeX, estudie ese breve ejemplo.
Puntaje:
Fecha de entrega: Miercoles 22 de Septiembre, por U-Cursos.