Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| teaching:cc4101:tareas:xyz:2024-1:tarea3 [2024/07/11 01:20] – fdiaz | teaching:cc4101:tareas:xyz:2024-1:tarea3 [2024/07/11 02:24] (current) – [Codificando funciones anónimas de primera clase con Objetos (1 pto)] fdiaz | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Tarea 3 (Entrega: X de julio de 2024) ====== | ====== Tarea 3 (Entrega: X de julio de 2024) ====== | ||
| - | Esta tarea se distribuye con un archivo zip ({{ : | + | Esta tarea se distribuye con un archivo zip ({{ : | 
| Debe entregar via U-cursos **un archivo .zip** que contenga los archivos main.rkt y tests.rkt. | Debe entregar via U-cursos **un archivo .zip** que contenga los archivos main.rkt y tests.rkt. | ||
| Line 18: | Line 18: | ||
| - **Clases y objetos**: En esta sección se pide extender el lenguaje base con clases y objetos. En particular las clases deben ser entidades de primera clase, es decir, son valores del lenguaje. | - **Clases y objetos**: En esta sección se pide extender el lenguaje base con clases y objetos. En particular las clases deben ser entidades de primera clase, es decir, son valores del lenguaje. | ||
| - | - **Codificando | + | - **Codificando | 
| <note warning> | <note warning> | ||
| Line 107: | Line 107: | ||
| ==== Manos a la Obra! ==== | ==== Manos a la Obra! ==== | ||
| - | ==== Clases (X pts) ==== | + | ==== Clases (1.5 pts) ==== | 
| **Extensiones del AST y Parser** | **Extensiones del AST y Parser** | ||
| - | * [x pts] Defina el tipo de datos '' | + | * [0.1 pts] Defina el tipo de datos '' | 
| - | * [x pts] Implemente la función '' | + | * [0.1 pts] Implemente la función '' | 
| - | * [x pts] Extienda el tipo de datos '' | + | * [0.2 pts] Extienda el tipo de datos '' | 
| **Extensiones de '' | **Extensiones de '' | ||
| Line 158: | Line 158: | ||
| </ | </ | ||
| - | * [x pts] Extienda '' | + | * [0.7 pts] Extienda '' | 
| - |  | + | **Observación**: Puede añadir un parámetro extra a '' | 
| **Intérprete** | **Intérprete** | ||
| - | * [x pts] Extienda el tipo '' | + | * [0.3 pts] Extienda el tipo '' | 
| - | * [x pts] Extienda el intérprete para soportar la creación de clases. | + | * [0.1 pts] Extienda el intérprete para soportar la creación de clases. | 
| - |  | + | **Observación**: Recuerde que los métodos definidos en una clase deben utilizar el ambiente al momento de la creación de la clase y no el ambiente de cuando son invocados. | 
| - | ==== Objetos (X pts) ==== | + | ==== Objetos (1.5 pts) ==== | 
| **Extensiones del AST y Parser** | **Extensiones del AST y Parser** | ||
| - | * [x pts] Extienda el tipo de datos '' | + | * [0.2 pts] Extienda el tipo de datos '' | 
| **Extensiones de '' | **Extensiones de '' | ||
| - | * [x pts] Extienda '' | + | * [0.2 pts] Extienda '' | 
| **Intérprete** | **Intérprete** | ||
| - | * [x pts] Extienda el tipo '' | + | * [0.3 pts] Extienda el tipo '' | 
| - | * [x pts] Defina la función '' | + | * [0.4 pts] Defina la función '' | 
| - | * [x pts] Extienda el intérprete para permitir instanciar una clase utilizando la expresión '' | + | * [0.4 pts] Extienda el intérprete para permitir instanciar una clase utilizando la expresión '' | 
| - | Durante el instanciado de clases, deben cumplirse los siguientes requisitos: | + | **Observación**: Cuando se evalúa una expresión | 
| - | * La creación de un objeto con un número inválido de argumentos debe lanzar el error '' | + | |
| - | + | ||
| - | Además, para la creación de un objeto, los constructores son simplemente métodos llamados '' | + | |
| - | A continuación se muestran algunos ejemplos de los errores que pueden lanzarse al instanciar un objeto: | + | A continuación se muestran algunos ejemplos de instanciación de clases: | 
| <code scheme> | <code scheme> | ||
| Line 197: | Line 194: | ||
| </ | </ | ||
| - | ==== Llamados a métodos | + | <code scheme> | 
| + | ;; Esta clase no tienen ningún constructor con aridad 2 | ||
| + | > (run-val ' | ||
| + | {def init {init-x} {set x init-x}}}}} | ||
| + | 10} | ||
| + | {new C 1 2}}) | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | ==== Llamados a Métodos | ||
| **Extensiones del AST y Parser** | **Extensiones del AST y Parser** | ||
| - | * [x pts] Extienda el tipo de datos '' | + | * [0.2 pts] Extienda el tipo de datos '' | 
| **Extensiones de '' | **Extensiones de '' | ||
| - | * [x pts] Extienda '' | + | * [0.2 pts] Extienda '' | 
| **Intérprete** | **Intérprete** | ||
| - | * [x pts] Extienda el intérprete para permitir | + | * [0.4 pts] Extienda el intérprete para permitir | 
| - | Durante el instanciado de clases, deben cumplirse los siguientes requisitos: | + | **Observaciones**: | 
| - | * La invocación de un método inexistente debe lanzar el error ''" | + | * Recuerde en en la sección anterior (Objetos) implementó la función '' | 
| + | * La invocación de un método inexistente | ||
| - | A continuación se muestran | + | A continuación se muestran | 
| <code scheme> | <code scheme> | ||
| Line 221: | Line 228: | ||
| </ | </ | ||
| - | ==== Acceso a campos | + | <code scheme> | 
| + | ;; Esta clase no tiene el método set-x definido para la aridad 2 | ||
| + | > (run-val '{with {{A {class {x} | ||
| + | {def set-x {val-x} {set x val-x}}}} | ||
| + | {o {new A}}} | ||
| + | {-> o set-x 10 20}}) | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | ==== Acceso | ||
| **Extensiones del AST y Parser** | **Extensiones del AST y Parser** | ||
| - | * [x pts] Extienda el tipo de datos '' | + | * [0.2 pts] Extienda el tipo de datos '' | 
| - | * [x pts] Extienda el tipo de datos '' | + | * [0.2 pts] Extienda el tipo de datos '' | 
| **Extensiones de '' | **Extensiones de '' | ||
| Line 239: | Line 255: | ||
| </ | </ | ||
| - | * [x pts] Extienda '' | + | * [0.1 pts] Extienda '' | 
| - | * [x pts] Extienda '' | + | * [0.2 pts] Extienda '' | 
| **Intérprete** | **Intérprete** | ||
| - | * [x pts] Extienda el intérprete para permitir obtener el valor de un campo en una clase. | + | * [0.3 pts] Extienda el intérprete para permitir obtener el valor de un campo en una clase. | 
| - | * [x pts] Extienda el intérprete para permitir modificar el valor de un campo en una clase. | + | * [0.2 pts] Extienda el intérprete para permitir modificar el valor de un campo en una clase. | 
| Los errores dentro de '' | Los errores dentro de '' | ||
| Line 266: | Line 282: | ||
| </ | </ | ||
| + | ===== Codificando funciones anónimas de primera clase con Objetos (1 pto) ===== | ||
| + | Ahora incorporaremos funciones anónimas de primera clase (típicamente conocidas como " | ||
| - | **Extienda el lenguaje | + | Hint: Piense en lo que comúnmente hemos visto como sintaxis de " | 
| - | ===== Codificando Lambdas (1 pto) ===== | ||
| - | Ahora incorporaremosmos lambdas (funciones anónimas de primera clase) 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. | ||
| <code scheme> | <code scheme> | ||
| < | < | ||

