Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
teaching:cc4101:tareas:2020-1:tarea2 [2020/06/16 20:22] – [Listas (1.5 ptos)] bsubercaseauxteaching:cc4101:tareas:2020-1:tarea2 [2020/06/16 20:24] (current) – [Listas (1.5 ptos)] bsubercaseaux
Line 90: Line 90:
 </code> </code>
 ===== Listas (1.5 ptos) ===== ===== Listas (1.5 ptos) =====
-  - (0.3) Defina en MiniScheme+ el tipo de dato inductivo ''List'' (con dos constructores ''Empty'' y ''Cons''), y la función recursiva ''length'' que retorna el largo de una lista. Con estas definiciones, modifique la función ''run'' para que evalúe la expresión dada en un contexto donde se tiene la definición de ''List'' y de ''length''. Se espera el siguiente comportamiento: <code scheme>+  - (0.3) Defina en MiniScheme+ el tipo de dato inductivo ''List'' (con dos constructores ''Empty'' y ''Cons''), y la función recursiva ''length'' que retorna el largo de una lista (asumiendo que esta es de la forma '''{Cons e1 {Cons e2 ... {Cons en {Empty}}...}}''). Con estas definiciones, modifique la función ''run'' para que evalúe la expresión dada en un contexto donde se tiene la definición de ''List'' y de ''length''. Se espera el siguiente comportamiento: <code scheme>
 > (run '{Empty? {Empty}}) > (run '{Empty? {Empty}})
 #t #t
Line 98: Line 98:
 3 3
 </code> </code>
- 
-Asuma que la función ''length'' solo recibe listas de la forma '''{Cons e1 {Cons e2 ... {Cons en {Empty}}...}}''. 
   - (0.5) Extienda el lenguaje para soportar la notación '''{list e1 e2 ... en}'' como //azúcar sintáctico// para '''{Cons e1 {Cons e2 ... {Cons en {Empty}}...}}''.<code scheme>   - (0.5) Extienda el lenguaje para soportar la notación '''{list e1 e2 ... en}'' como //azúcar sintáctico// para '''{Cons e1 {Cons e2 ... {Cons en {Empty}}...}}''.<code scheme>
 > (run '{match {list {+ 1 1} 4 6} > (run '{match {list {+ 1 1} 4 6}