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:47] – [Acceso a campos (X pts)] gricci | 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**: | **Observación**: | ||
**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**: | **Observación**: | ||
- | ==== 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 '' |
**Observación**: | **Observació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}) | + | |
" | " | ||
</ | </ | ||
- | ==== Llamados a Métodos (X pts) ==== | + | ==== Llamados a Métodos (0.8 pto) ==== |
**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 evaluar la invocación de métodos de un objeto. | + | * [0.4 pts] Extienda el intérprete para permitir evaluar la invocación de métodos de un objeto. |
**Observaciones**: | **Observaciones**: | ||
Line 237: | Line 228: | ||
</ | </ | ||
- | ==== Acceso y Modificación a Campos (X pts) ==== | + | <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 y Modificación a Campos (1.2 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 '' |
- | * [x pts] Extienda el tipo de datos '' | + | * [0.2 pts] Extienda el tipo de datos '' |
**Extensiones de '' | **Extensiones de '' | ||
Line 255: | 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 282: | 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> | ||
< | < |