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 02:00] – [Llamados a Métodos (0.8 pto)] 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 178: | Line 178: | ||
| **Intérprete** | **Intérprete** | ||
| * [0.3 pts] Extienda el tipo '' | * [0.3 pts] Extienda el tipo '' | ||
| - | * [0.4 pts] Defina la función '' | + | * [0.4 pts] Defina la función '' | 
| * [0.4 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 '' | ||
| Line 195: | Line 195: | ||
| <code scheme> | <code scheme> | ||
| - | ;; Una clase sin constructores puede ser creado solo con {new class}, sin argumentos | + | ;; Esta clase no tienen ningún constructor | 
| - | > (run-val '{with {{x 10} | + | > (run-val '{begin | 
| - |  | + |  | 
| - |  | + |  | 
| - | 1}) | + |  | 
| - | " | + | |
| - | </ | + | |
| - | + | ||
| - | <code scheme> | + | |
| - | ;; Una clase sin constructores puede ser creado solo con {new class}, sin argumentos | + | |
| - | > (run-val '{with {{x 10} | + | |
| - | {A {class {x}}} | + | |
| - |  | + | |
| - | 1}) | + | |
| " | " | ||
| </ | </ | ||
| Line 238: | Line 229: | ||
| <code scheme> | <code scheme> | ||
| - | ;; Esta clase no tienen ningún constructor con aridad 2 | + | ;; Esta clase no tiene el método set-x definido para la aridad 2 | 
| - | > (run-val '{begin | + | > (run-val '{with {{A {class {x} | 
| - |  | + | {def set-x {val-x} {set x val-x}}}} | 
| - | 10} | + | {o {new A}}} | 
| - |  | + | {-> o set-x 10 20}}) | 
| - | " | + | " | 
| </ | </ | ||
| Line 291: | Line 282: | ||
| </ | </ | ||
| - | ===== Codificando | + | ===== Codificando | 
| - | 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. | + | Ahora incorporaremos | 
| + | |||
| + | Hint: Piense en lo que comúnmente hemos visto como sintaxis de " | ||
| <code scheme> | <code scheme> | ||
| < | < | ||

