La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Agenda Clase 6 Iteradores. Enumeración sin iteradores. Loops lógicos. Recursión vs. Iteración. Recursión de Cola. Orden de Evaluación Normal y Aplicativo.

Presentaciones similares


Presentación del tema: "Agenda Clase 6 Iteradores. Enumeración sin iteradores. Loops lógicos. Recursión vs. Iteración. Recursión de Cola. Orden de Evaluación Normal y Aplicativo."— Transcripción de la presentación:

1 Agenda Clase 6 Iteradores. Enumeración sin iteradores. Loops lógicos. Recursión vs. Iteración. Recursión de Cola. Orden de Evaluación Normal y Aplicativo. No determinismo.

2 Iteradores Generalizan los loops controlados por enumeración. Son utilizados para enumerar los elementos de conjuntos bien definidos. –Clu permite la definición de iteradores sobre cualquier conjunto de tipo abstracto de datos para enumerar sus items.

3 Iteradores: Ejemplo en Clu from_to_by = iter(from, to, by:int) yields (int) i:int:=from if by>0 then while i<=to do yield i i +:= by end; else while i>=to do yield i i+:=by end end from_to_by for i in from_to_by(first, last, step) do... end Definición del Iterador Invocación del Iterador paso de iteración positivo -incremento- paso de iteración negativo -decremento-

4 Iteradores: Enumerando Árboles Binarios de n Nodos

5 Iteradores: Generadores en Icon Icon denomina generadores a los iteradores y los utiliza igual que Clu para la iteración controlada por enumeración. every i:= first to last by step do {…} Dado que Icon fue diseñado para la manipulación de Strings, los iteradores se utilizan en la manipulación de datos de este tipo.

6 Enumerando sin iteradores Incapacidad del stack para el control en las subrutinas debido a la gran cantidad de saltos desde y hacia el punto de llamada. Convenciones de programación que simulan el efecto de los iteradores sacrificando con ello cierto grado de elegancia en el código.

7 Loops Controlados Lógicamente La implementación más común es pre-test while do Ni Fortran ni Algol proveen constructor while y para imitarlo se debe recurrir al goto. También pueden definirse loops post-test a través de la sentencias: repeat until (Modula y Pascal) do while (en C) Es recomendable implementar los mid-test loop explotando las herramientas que para tales fines brinde el lenguaje: when exit (Modula) if exit (Modula 2) break (C, C++, Java)

8 Recursión vs. Iteración La recursión no requiere sintáxis especial más allá de que las funciones puedan llamarse a si mismas o invocar a otras funciones que las llame. Cualquier algoritmo iterativo puede escribirse recuersivamente y viceversa. Ambos enfoques tienen la misma capacidad de cómputo. La recursión es más natural en lenguajes funcionales y la iteración en lenguajes imperativos.

9 Recursión de Cola: ejemplo en Scheme. Versión sin recursión de cola (define summation (lambda (f low high) (if (= low high) (f low) (+ (f low) (summation f (+ low 1) high))))) Versión con recursión de cola (define sum (lambda (f low high subtotal) (if (= low high) (+ subtotal (f low)) (sum f (+ low 1) high (+ subtotal f (low)))))) sum (f low high 0) Invocación inicial

10 Orden de Evaluación Aplicativo y Normal Orden Aplicativo: los parámetros son evaluados antes de ser pasados a una subrutina. Orden Normal: los parámetros son evaluados sólo cuando es necesario. Ej: macros en C.

11 No Determinismo La escogencia entre alternativas no está especificada deliberadamente. Se vale de condiciones comandos de guardia. Más de dos alternativas ciertas a la vez implican el uso de un if aunque esto tenderá a favorecer una opción sobre la otra. Alternativa: listas circulares Alternativa 2: asignación de números aleatorios u otros mecanismos heurísticos.


Descargar ppt "Agenda Clase 6 Iteradores. Enumeración sin iteradores. Loops lógicos. Recursión vs. Iteración. Recursión de Cola. Orden de Evaluación Normal y Aplicativo."

Presentaciones similares


Anuncios Google