Entrega 0
deadline: 27 de Agosto 2023
⚠ Importante
Dado que esta entrega inicial es una introducción a OCaml, deberá ser realizada de manera individual. Es importante que cada uno tenga un buen manejo del lenguaje lo antes posible.
Recuerden las reglas del código de conducta.
Objetivos básicos de la entrega:
Tener un ambiente de desarrollo Ocaml funcional
Entender un código OCaml simple
Extender un interprete para un lenguaje con operaciones aritméticas, booleanos y funciones de primera clase
Distribución de puntaje:
5pts Spec básica.
1pt testing.
1pt calidad del código.
1 Para empezar
El código de referencia que tiene que usar está en U-cursos (sección material docente).
Explore las carpetas, los distintos archivos, y asegurese de poder ejecutar
el interprete, los tests, y de poder probar el interprete de manera interactiva en utop
.
Vean el video de introducción. Cualquier pregunta, use el foro de U-cursos.
2 Simplificaciones de expresiones aritméticas
Añada a interp.ml
una función
simplify : exp -> exp
para hacer optimizaciones usando las siguientes ecuaciones:
x + 0 = x = 0 + x
1 * x = x = x * 1
¡No se olvide de escribir los tests! También adapte las simplificaciones cuando la representación de exp
cambia.
3 Extensiones del interprete
Siguiendo el ejemplo de este interprete en Racket, extienda el lenguaje con:
Un tipo de valor booleano, con elementos true y false, y una expresión (if bool-cond branch-true branch-false). Puede tener los valores true o false (sin mayúsculas)
Otras operaciones aritméticas
-
y/
, booleanasnot
yand
, y comparaciones entre enteros<
y=
Let-bindings (let* ((var expr) ...) body), por ejemplo
(let* ((x 2) (y 1)) (+ x y)) (Recuerda: un let* con varios identificadores es equivalente a varios let unarios anidados.)
Funciones de primera clase:
(let ((f (fun (x) (+ 3 x))) (g (fun (y) (* 7 y)))) (g (f 3))) (let ((addn (fun (n) (fun (m) (+ n m))))) ((addn 10) 2)) Nota: Pueden implementar los let-bindings como azúcar sintáctico para aplicación de lambda.
¡No se olvide de escribir los tests!
4 Mecanismo de Entrega
Para esta entrega individual debe subir a la tarea en UCursos:
Un
zip
con todo su directorio de trabajo, incluyendo los tests.Adentro del
zip
, un archivo de textoENTREGA0.md
describiendo brevemente lo que intentaron y lograron hacer, y qué cosas testearon