Both sides previous revisionPrevious revisionNext revision | Previous revision |
teaching:cc4101:tareas:2024-1:tarea3 [2024/07/11 02:35] – [Tarea 3 (Entrega: X de julio de 2024)] fdiaz | teaching:cc4101:tareas:2024-1:tarea3 [2024/07/11 07:04] (current) – etanter |
---|
====== Tarea 3 (Entrega: 19 de julio de 2024) ====== | ====== Tarea 3 (Entrega: 21 de julio de 2024) ====== |
| |
Esta tarea se distribuye con un archivo zip ({{ :teaching:cc4101:tareas:2024-1:tarea3:tarea3-base.zip | base}}) que contiene 3 archivos: main.rkt, tests.rkt y env.rkt. Los archivos están incompletos, y en ellos tiene que implementar lo que se solicita en las preguntas siguientes. | Esta tarea se distribuye con un archivo zip ({{ :teaching:cc4101:tareas:2024-1:tarea3:tarea3-base.zip | base}}) que contiene 3 archivos: main.rkt, tests.rkt y env.rkt. Los archivos están incompletos, y en ellos tiene que implementar lo que se solicita en las preguntas siguientes. |
<note warning> | <note warning> |
* La tarea se debe realizar SIN usar macros. | * La tarea se debe realizar SIN usar macros. |
* El objetivo de la tarea es que implemente un intérprete sintáctico para el lenguaje que se presenta. Esto quiere decir en particular que las clases y objetos no pueden ser codificados con lambdas de Racket (*) | * El objetivo de la tarea es que implemente un intérprete sintáctico para el lenguaje orientado a objetos que se presenta. Esto quiere decir en particular que las clases y objetos no pueden ser codificados con clases/objetos o lambdas de Racket (*). Tienen que ser representados como estructuras de datos. |
| |
En resumen, deben usar los conceptos de OOP vistos en clase y que también se presentan en el [[https://users.dcc.uchile.cl/~etanter/ooplai/|apunte OOPLAI]]. | En resumen, deben usar los conceptos de OOP vistos en clase y que también se presentan en el [[https://users.dcc.uchile.cl/~etanter/ooplai/|apunte OOPLAI]]. |
Ahora incorporaremos funciones anónimas de primera clase (típicamente conocidas como "lambdas") a nuestro lenguaje. A diferencia de lo visto durante el curso, en esta ocasión no daremos una interpretación directa de las funciones. Usted debe idear una manera de usar la implementación de clases y objetos hecha en la parte anterior para codificar las lambdas. Esto significa que **no puede modificar** el AST y el intérprete para soportar funciones y aplicaciones de funciones. Las modificaciones que debe hacer son en el **parser**. En otras palabras, las funciones y aplicaciones serán sólo azúcar sintáctica. | Ahora incorporaremos funciones anónimas de primera clase (típicamente conocidas como "lambdas") a nuestro lenguaje. A diferencia de lo visto durante el curso, en esta ocasión no daremos una interpretación directa de las funciones. Usted debe idear una manera de usar la implementación de clases y objetos hecha en la parte anterior para codificar las lambdas. Esto significa que **no puede modificar** el AST y el intérprete para soportar funciones y aplicaciones de funciones. Las modificaciones que debe hacer son en el **parser**. En otras palabras, las funciones y aplicaciones serán sólo azúcar sintáctica. |
| |
Hint: Piense en lo que comúnmente hemos visto como sintaxis de "aplicación de función" como azúcar sintáctico para la invocación de un método en un objeto, este método puede contener el código de la "función" definida. ¿De qué clase sería ese objeto? ¿Cómo se podría llamar ese método? | **Hint:** Piense en lo que comúnmente hemos visto como sintaxis de "aplicación de función" como azúcar sintáctico para la invocación de un método en un objeto, este método puede contener el código de la "función" definida. ¿De qué clase sería ese objeto? ¿Cómo se podría llamar ese método? |
| |
<code scheme> | <code scheme> |