Clase 1 de prácticas: Introducción a Scheme
|
|
|
- María del Carmen Herrero Rico
- hace 9 años
- Vistas:
Transcripción
1 Clase 1 de prácticas: Introducción a Scheme Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio 7 (ampliación) Ejercicio 8 (ampliación) Ejercicio 9 (ampliación) Normas de entrega...5
2 Clase 1 de prácticas: Introducción a Scheme 1. Ejercicio 1 Lanza el programa DrScheme y, después de haber cargado el fichero "simply.scm", escribe cada una de las siguientes instrucciones en el intérprete. Piensa en los resultados!!. Intenta entender cómo interpreta Scheme lo que escribes. 3 (equal? 'hola "hola") (+ 1 2) (first hola) ( ) (first (bf 'hola)) (+) (first 234) (sqrt 25) (butfirst 234) (* (+ 2 3) 5) (+ (first 34) (last 45)) + (define pi ) '+ pi 'hola 'pi "hola" (+ pi 7) (first 'hola) (* pi pi) (first "hola") (define (square x) (* x x)) (butfirst 'hola) (square 5) (butfirst "hola") (square (+ 2 3)) 2. Ejercicio 2 Predice lo que devolverá Scheme cuando escribas las siguientes expresiones. Después, pruébalas y comprueba si tu predicción era correcta. Si no lo era, intenta comprender por qué. (define a 3) (define b (+ a 1)) (+ a b (* a b)) (= a b) (if (and (> a b) (< b (* a b))) b a) (cond ((= a 4) 6) ((= b 4) (+ 6 7 a)) (else 25)) (+ 2 (if (> b a) b a)) (* (cond ((> a b) a) ((< a b) b) (else -1)) (+ a 1)) ((if (< a b) + -) a b) 3. Ejercicio 3 Escribe un procedimiento llamado segundos->tiempo que tome dos argumentos como Page 2
3 Clase 1 de prácticas: Introducción a Scheme entrada: un número en segundos como primer argumento y un literal indicando el tipo al que se quiere transformar (segundos, minutos, horas, días, semanas, meses, años o siglos). Tiene que devolver una palabra con la transformación realizada del número al tipo, concatenando al final de la misma el tipo solicitado en el segundo argumento: (segundos->tiempo 930 'minutos)) 15.5minutos (segundos->tiempo 45 'segundos) 45segundos (segundos->tiempo 'siglos) siglos 4. Ejercicio 4 Escribe un procedimiento llamado quitar-dupl que, cuando se le pase una palabra como entrada, devuelva el resultado de quitar las letras duplicadas de la palabra. Debería funcionar así: (quitar-dupl 'abcaedeb) cadeb (quitar-dupl 'abc) abc (quitar-dupl 'aaaabaaa) ba 5. Ejercicio 5 En clase de teoría has visto que el símbolo if es una forma especial. Vamos a probar a redefinirlo utilizando el propio if: (define (new-if predicate then-clause else-clause) (if predicate then-clause else-clause)) Vamos a probarlo : (new-if (= 2 3) 0 5) (new-if (= 1 1) 0 5) (new-if (= 1 1) 0 (/ 3 0)) Compara los resultados con la forma especial if. Explica detalladamente qué sucede y por qué. Page 3
4 Clase 1 de prácticas: Introducción a Scheme 6. Ejercicio 6 Tenemos las siguientes definiciones: (define (square x) (* x x)) (define (foo x y) x) (define (bar x y) (* x y y)) ;;efectúa una llamada a * Responde a las siguientes cuestiones: Cuántas veces se llama a * cuando se evalúa (foo (square (* 1 1)) (square (* 1 1))) en orden normal? Y en orden aplicativo? Cuántas veces se llama a * cuando se evalúa (bar (square (* 1 1)) (square (* 1 1))) en orden normal? Y en orden aplicativo? Pertenecen estos procedimientos al Paradigma de la Programación Funcional? Explica detalladamente tus respuestas. 7. Ejercicio 7 (ampliación) Escribe el procedimiento ordenado? que tome una palabra con dígitos y devuelva cierto si los números están en orden ascendente y falso en otro caso. 8. Ejercicio 8 (ampliación) Escribe el procedimiento squares que tome una palabra con dígitos como argumento y devuelva una palabra con el cuadrado de cada dígito. Ejemplo: (squares '232) 494 (squares ' ) Ejercicio 9 (ampliación) Supongamos que tenemos una función mágica llamada count que no tiene argumentos. Cada vez que se invoque, devuelvolverá 1 más que la vez anterior, empezando en 1. De modo que, (+ (count) (count)) devolverá 3. Evalúa: (square (square (count))) en orden aplicativo y en orden normal. Explica detalladamente tus respuestas. Page 4
5 Clase 1 de prácticas: Introducción a Scheme 10. Normas de entrega Fecha de entrega: durante la semana del 5 al 9 de marzo, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 3, 4, 5 y 6 Solución a los ejercicios 3 y 4 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 7, 8 y 9 Soluciones a los ejercicios 7 y 8 cargadas en el ordenador. Page 5
6 Clase 2 de prácticas: Funciones como datos primitivos Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio 5 (ampliación) Ejercicio 6 (ampliación) Ejercicio 7 (ampliación) Normas de entrega... 5
7 Clase 2 de prácticas: Funciones como datos primitivos 1. Ejercicio 1 Definimos el procedimiento componer que realiza la composición de funciones: (define (componer f g) (lambda (x) (f (g x)))) Dadas las siguientes expresiones, predice lo que devolverá Scheme. Piensa en los resultados antes de probarlos en el intérprete. Explica detalladamente tus respuestas. (lambda (x) (+ x 1)) ((lambda (y) (+ (* y 3) 6)) 25) ((lambda (b) (* 10 b)) ((lambda (e) (+ e 5)) 5)) ((lambda (x) (x 5)) (lambda (y) 4)) ((componer cuadrado (lambda (x) (+ 2 x))) 3) ((componer (lambda (x) (+ x 2)) cuadrado) 3) ((componer (lambda (f) (if f "correcto" "incorrecto")) (lambda (x) (> x 3))) 4) ((componer (lambda (x) (> x 3)) (lambda (f) (if f "correcto" "incorrecto"))) 4) (lambda (x) (lambda (y) (x y))) ((lambda (x) (lambda (y) (x y))) cuadrado) 2. Ejercicio 2 Define un procedimiento para cada una de las siguientes llamadas (3 procedimientos en total). Su evaluación debe devolver lo esperado y no dar error. (((f f f)) 'hola) 'hola ((g g) g 'hola) 'hola (h (h (h 'hola h) h) h) 'hola 3. Ejercicio 3 Escribe un procedimiento llamado (intercambio old new) que tome dos elementos como argumento y a su vez devuelva un procedimiento que tome una palabra como argumento, y reemplace cada ocurrencia del primer elemento por el segundo. Ejemplo: (define a-por-b (intercambio 'a 'b)) (a-por-b 'abcba) bbcbb Page 2
8 Clase 2 de prácticas: Funciones como datos primitivos (define seis-por-siete (intercambio '6 '7)) (seis-por-siete ' ) Ejercicio 4 Escribe un procedimiento llamado cuantos-cumplen que tome como argumentos un predicado. Tiene que devolver un procedimiento que reciba una lista como argumento y devuelva el número de elementos de la lista que cumplen el predicado. Ejemplos: ((cuantos-cumplen vocal?) '(a e 3 4 f t i 3 o u)) 5 ((cuantos-cumplen even?) '( )) 3 5. Ejercicio 5 (ampliación) Muchos procedimientos de Scheme requieren un cierto tipo de argumentos. Por ejemplo, los procedimientos numéricos sólo funcionan cuando se les pasa argumentos numéricos. Si se les pasa un argumento de otro tipo se produce un error. (sqrt 'hola) error. sqrt: expects argument of type number; given hola Escribe un procedimiento llamado chequeo-tipos. Sus argumentos son una función, un predicado que comprueba el tipo del argumento y un dato. Debe devolver el dato si el argumento es legal y #f en caso contrario. (chequeo-tipo sqrt number? 'hello) #f (chequeo-tipo sqrt number? 4) 2 Resulta un poco engorroso utilizar chequeo-tipos de forma explícita cada vez. En su lugar nos gustaría usar un procedimiento make-safe que tome dos argumentos (una función y un predicado de comprobación de tipos) y devuelva una nueva función que devuelve #f si el su argumento no satisface el predicado: (define safe-sqrt (make-safe sqrt number?)) (safe-sqrt 'hola) #f (safe-sqrt 4) 2 Page 3
9 Clase 2 de prácticas: Funciones como datos primitivos 6. Ejercicio 6 (ampliación) Vamos a jugar al escondite. Un buscador busca un elemento concreto en una lista. Un crea-buscador es un procedimiento que toma un elemento x y devuelve un procedimiento (buscador) que toma una lista y devuelve x si ese elemento está en la lista y #f si no. (define 4-buscador (crea-buscador 4)) (4-buscador '( )) 4 (4-buscador '(1 2 3)) #f Un escondedor de un elemento es un procedimiento que toma una lista como argumento y esconde el elemento detrás de un *. Un crea-escondedor es un procedimiento que toma un elemento como argumento y devuelve el procedimiento escondedor de ese elemento. (define 4-escondedor (crea-escondedor 4)) (4-escondedor '( )) (1 2 3 *4 5) (4-escondedor '(1 2 3)) (1 2 3) De esta forma, si el buscador quiere encontrar un elemento al que ha escondido un escondedor no lo encuentra!: (4-buscador (4-escondedor '( ))) #f a) Implementa crea-buscador. b) Implementa crea-escondedor. 7. Ejercicio 7 (ampliación) Escribe un procedimiento llamado n_composed que tome como argumentos un procedimiento f y un entero positivo n. Deberá devolver un procedimiento que realice n veces la composición de f. ((n_composed square 2) 5) 625 ((n_composed (lambda (x) (+ x 1)) 5) 300) 305 Page 4
10 Clase 2 de prácticas: Funciones como datos primitivos 8. Normas de entrega Fecha de entrega: durante la semana del 12 al 16 de marzo, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2, 3 y 4 Soluciones a los ejercicios 2, 3 y 4 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 5, 6 y 7 Soluciones a los ejercicios 5, 6 y 7 cargadas en el ordenador. Page 5
11 Clase 3 de prácticas: Recursión Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio 5 (ampliación) Ejercicio 6 (ampliación) Normas de entrega... 4
12 Clase 3 de prácticas: Recursión Nota: Para la realización de esta práctica te puede resultar útil activar la traza de Scheme. Para ello escribe la instrucción (require (lib "trace.ss")) para cargar la librería que ejecuta las trazas. Para activar la traza de un procedimiento, escribe (trace procedimiento) y para desactivarla (untrace procedimiento). 1. Ejercicio 1 Dados los procedimientos "helper" siguientes: (define (helper1 x) (if (= x 0) 1 (helper1 (- x 1)))) (define (helper2 x) (if (= x 0) 1 (+ 1 (helper2 (- x 1)))) Explica si los cinco procedimientos siguientes generan procesos recursivos o iterativos: (define (proc1 x) (if (even? x) (helper1 (- x 1)) (helper1 (- x 2)))) (define (proc2 x) (if (even? x) (helper2 (- x 1)) (helper2 (- x 2)))) (define (proc3 x) (if (= x 0) (helper2 x) (helper1 x))) (define (proc4 x) (if (= x 0) (helper1 x) (helper2 x))) (define (proc5 x) (cond ((= x 0) 1) ((= (helper2 x) 3) 5) (else (helper1 x)))) 2. Ejercicio 2 Page 2
13 Clase 3 de prácticas: Recursión Escribe un procedimiento llamado iniciales que reciba una lista como argumento y devuelva una lista con la primera letra de cada elemento de la lista. Escribe dos versiones: proceso recursivo y proceso iterativo. (iniciales '(Lenguajes y Paradigmas de Programación)) (L y P d P) 3. Ejercicio 3 Escribe el procedimiento ordenar que tome una lista como argumento. Tiene que devolver una lista con los mismos elementos ordenados en orden alfabético. Explica si tu procedimiento genera un proceso recursivo o iterativo. (ordenar '(Esto es una clase de prácticas)) (clase de es Esto prácticas una) Pista1: Te puede ayudar la implementación de un procedimiento auxiliar insertar que, dado un elemento y una lista, inserte el elemento en su posición ordenada en la lista: (insertar 'paradigmas '(lenguajes programación)) (lenguajes paradigmas programación) Pista2: Puedes utilizar la primitiva before? para saber si una palabra va delante de otra alfabéticamente: (before? 'hola 'adios) #f 4. Ejercicio 4 Escribe una función recursiva que genere un proceso iterativo llamada cuenta-cruces-cero que reciba una lista con números como argumento. Deberá devolver el número de veces que se cruza por el cero. Un cruce por el cero se produce cuando: o bien dos números consecutivos distintos de cero o bien dos números distintos de cero separados por ceros, tienen signos opuestos. (cuenta-cruces-cero '( )) 2 (cuenta-cruces-cero '( )) 1 Page 3
14 Clase 3 de prácticas: Recursión 5. Ejercicio 5 (ampliación) Escribe el procedimiento romano->arabico que convierta un número romano en su correspondiente número arábico. Indica si tu proceso es recursivo o iterativo y explica por qué. (romano->arabico 'MCMLXXI) 1971 (romano->arabico 'MLXVI) 1066 (romano->arabico 'D) 50 (romano->arabico MCDXCII) 2092 Correspondencia: I-1, V-5, X-10, L-50, C-100, D-500, M Ejercicio 6 (ampliación) Dada la función recursiva: (define (elevado a b) (if (= b 0) 1 (* a (elevado a (- b 1))))) Escribe su correspondiente versión iterativa. 7. Normas de entrega Fecha de entrega: durante la semana del 19 al 23 de marzo, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2, 3 y 4 Soluciones a los ejercicios 2, 3 y 4 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 5 y 6 Soluciones a los ejercicios 5 y 6 cargadas en el ordenador. Page 4
15 Clase 4 de prácticas: Listas Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio 5 (ampliación) Ejercicio 6 (ampliación) Normas de entrega... 3
16 Clase 4 de prácticas: Listas 1. Ejercicio 1 Predice el resultado de las siguientes expresiones antes de probarlas en Scheme. Para cada expresión, explica si es una lista o no. A continuación dibuja los diagramas box and pointer de las expresiones. (define z (cons 'lenguajes 'y)) (define w (cons z 'paradigmas)) (define y (cons w (cons 'de 'programacion))) (define a (cons (cdr(car(car y))) (cdr(cdr y)))) (define b (cons (car z) (cons (cdr(car y)) (cons (cdr(cdr y)) nil)))) Nota: nil se define como '() 2. Ejercicio 2 Qué devolvera Scheme en las siguientes expresiones? Si el resultado es un pair, dibuja el diagrama box and pointer asociado: ((caddr (1 + * 2)) 3 4) (list? (cons 1 (cons 2 (cons nil nil)))) (list (list (list (cons 1 nil)))) (list one (cons foo (list ()))) (cddadr (a (((b)) c d e f) g)) 3. Ejercicio 3 En clase de teoría has visto que las instrucciones anidadas del tipo (car (cdr (car '( )))) son equivalentes a (cadar '( )). Escribe un procedimiento (desanida expr) que tome una expresión de car y cdr anidados y devuelva su correspondiente expresión simplificada. (desanida '(car (cdr (car (cdr lista))))) (cadadr lista) (desanida '(car (cdr (car '( ))))) (cadar '( )) 4. Ejercicio 4 Define un procedimiento (cuenta-elems ls) el cual, dada una lista, devuelva una lista de parejas donde el car es un elemento y el cdr es el número de veces que aparece en la lista ls. Se valorará el uso de procedimientos auxiliares. Page 2
17 Clase 4 de prácticas: Listas (cuenta-elems '(a b b b c d d a e e f a a )) ((a. 4) (b. 3) (c. 1) (d. 2) (e. 2) (f. 1)) (cuenta-elems '(hola hola 3 2 hola 3 2 3)) ((hola. 3) (3. 3) (2. 2)) 5. Ejercicio 5 (ampliación) En clase de teoría has visto que el una expresión con let se puede expresar utilizando lambda. Escribe un procedimiento (let->lambda expr) que reciba una expresión let como argumento y la transforme a su correspondiente expresión lambda. (let->lambda '(let ((x 3) (y 10)) (+ x y))) ((lambda (x y) (+ x y)) 3 10) 6. Ejercicio 6 (ampliación) Escribe un procedimiento (aplica-procs procs ls) que reciba una lista de procedimientos unarios como argumento y una lista numérica. Tiene que aplicar cada procedimiento a cada elemento de la lista y devolver una lista con los resultados. (define (cuadrado x) (* x x)) (define (doble x) (* x 2)) (define (1+ x) (+ 1 x)) (aplica-procs (list cuadrado doble 1+) '(2 3 4)) ( ) ; 2^2=4, 4*2=8, 8+1=9 ; 3^2=9, 9*2=18, 18+1=19 ; 4^2=16, 16*2=32, 32+1=33 7. Normas de entrega Fecha de entrega: durante la semana del 26 al 30 de marzo, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2, 3 y 4 Soluciones al ejercicio 3 y 4 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Page 3
18 Clase 4 de prácticas: Listas Papel con las soluciones de los ejercicios 5 y 6 Soluciones a los ejercicios 5 y 6 cargadas en el ordenador. Page 4
19 Clase 5 de prácticas: Abstracción Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio 7 (ampliación) Normas de entrega... 4
20 Clase 5 de prácticas: Abstracción 1. Ejercicio 1 Dadas los siguientes procedimientos: (define (suma-nums nums) (if (null? nums?) 0 (+ (car nums) (sumanums (cdr nums))))) (define (junta-pal lista) (if (null? lista) "" (word (car lista) (junta-pal (cdr lista))))) Generaliza el patrón de ambas funciones. 2. Ejercicio 2 En el siguiente enlace os proporcionamos el codigo en scheme de un simulador del juego de cartas Twenty-One (Twenty-One.html). Descárgalo y experimenta con él. A continuación define un procedimiento stop-at que reciba un número como argumento y devuelva una estrategia como procedimiento. La estrategia devuelta por stop-at deberia pedir una nueva carta si y sólo si el total de una mano es menor que el argumento pasado a stop-at. Por ejemplo, (stop-at 16) devuelve una estrategia que pide otra carta si el total de la mano es menor que 16, pero para si el total alcanza 16. Para probar tu procedimiento, juega unas cuantas veces con el simulador evaluando: (twenty-one hit? (stop-at 16)) Estarás jugando contra un jugador cuya estrategia es parar en Ejercicio 3 Define el procedimiento test-strategy que evalue dos estrategias jugando un número de veces con el simulador Twenty-One utilizando las dos estrategias. Deberá devolver el número de veces que ha ganado el player-1 (y que por tanto ha perdido el player-2). Por ejemplo: (test-strategy (stop-at 16) (stop-at 15) 10) Deberá jugar 10 veces al Twenty-One, utilizando el valor devuelto por (stop-at 16) como la estrategia para el player-1 y el valor de (stop-at 15) como la estrategia del player-2. Deberá devolver un entero no negativo indicando cuántas veces ha ganado el player-1. Page 2
21 Clase 5 de prácticas: Abstracción 4. Ejercicio 4 Implementa un procedimiento llamado watch-player que reciba una estrategia como argumento y devuelva una estrategia. Esta estrategia devuelta deberá hacer lo mismo que la estrategia que se le pasa como argumento, pero además, debera imprimir toda la información que se le pasa a la estrategia (la mano y la carta del oponente) y la decisión de la estrategia. Ejemplo: (twenty-one (watch-player (stop-at 16)) (watch-player (stop-at 15))) Carta del adversario: 3 Total: 5 Decisión: Otra carta Carta del adversario: 3 Total: 9 Decisión: Parar Carta del adversario: 5 Total: 3 Decisión: Otra carta Carta del adversario: 5 Mi total: 12 Decisión: Otra carta 2 5. Ejercicio 5 Define el procedimiento my_strategy que implemente la siguiente estrategia: Si la mano tiene menos de 12 puntos, siempre pedirá otra carta. Si la mano tiene más de 16 puntos, siempre se parará. Si la mano tiene exactamente 12 puntos, pedirá otra carta si la carta del adversario era menor que 4. Si la mano tiene exactamente 16 puntos, se parará si la carta del oponente era 10. En cualquier otro caso, la estrategia deberá pedir otra carta si la carta del oponente era mayor que 6, en otro caso parará. Prueba tu procedimiento: (test-strategy my-strategy (stop-at 15) 10) (test-strategy my-strategy (stop-at 16) 10) Page 3
22 Clase 5 de prácticas: Abstracción (test-strategy my-strategy (stop-at 17) 10) 6. Ejercicio 6 Implementa el procedimiento both que tome dos estrategias como argumento y devuelva una nueva estrategia. Esta nueva estrategia deberá pedir una nueva carta sólo si ambas estrategias la pedirian. Por ejemplo, la estrategia (both (stop-at 19) hit?) pedirá una nueva carta si el total de la mano es menor que 19 y el usuario pide una nueva carta. 7. Ejercicio 7 (ampliación) La simulación que hemos utilizado es muy estricta en el sentido de que se representa una mano simplemente como un par de números. Supongamos que también queremos mantener las cartas de una mano, sus valores y sus palos. Una forma de hacer ésto sería utilizando un dato abstracto card para representar una carta. Una mano hand se representaría como la carta up-card junto con una lista de cartas (las que se tienen en la mano). a) Diseña la barrera de abstracción de los tipos de datos card y hand. El tipo de dato card tendrá un constructor (make-card valor palo) y selectores (valor-card carta) y (palo-card carta). El tipo de dato hand tendrá como constructor (make-hand up-card) y como selectores y operadores (up-card-hand hand), (add-card-hand card hand) y (total-hand hand). Implementa otros operadores si lo consideras necesario. b) Explica cómo cambiarías la implementación del twenty-one para llevarlo a cabo. c) Qué mas necesitarías cambiar para que la simulación funcione correctamente? d) Implementa una nueva estrategia que use esta información extra sobre las manos. 8. Normas de entrega Fecha de entrega: durante la semana del 2 al 6 de abril, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2, 3, 4, 5 y 6 Soluciones a los ejercicios 1, 2, 3, 4, 5 y 6 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Page 4
23 Clase 5 de prácticas: Abstracción Papel con las soluciones del ejercicio 7 Solución al ejercicio 7 cargada en el ordenador. Page 5
24 Clase 6 de prácticas: Estructuras de datos recursivas (listas y árboles) Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio 4 (ampliación) Ejercicio 5 (ampliación) Normas de entrega... 4
25 Clase 6 de prácticas: Estructuras de datos recursivas (listas y árboles) Nota: El árbol genérico que se ha utilizado en algunos ejemplos de esta práctica es el siguiente: (define t1 (make-tree 9 nil)) (define t2 (make-tree 32 nil)) (define t3 (make-tree 52 nil)) (define t4 (make-tree 102 nil)) (define t5 (make-tree 28 (list t1 t2))) (define t6 (make-tree 70 (list t3 t4))) (define tree (make-tree 40 (list t5 t6))) 1. Ejercicio 1 a) Escribe el procedimiento (max-of-pt ptree) que reciba un pseudoárbol numérico como argumento y devuelva el máximo de todos sus nodos. (max-of-pt '( (42 2) (7 (91 2) (2 (4 62 8))))) 91 b) Escribe ahora el procedimiento (max-of-tree tree) para árboles genéricos. tree (40 (28 (9) (32)) (70 (52) (102))) (max-of-tree tree) Ejercicio 2 Define el procedimiento (total-hijos tree) que vaya recorriendo los nodos del árbol tree, calculando el número de hijos de cada nodo y que devuelva total de hijos encontrado en el árbol tree. Por ejemplo, el árbol tree se corresponde con la siguiente figura: El número total de hijos es 6. tree (40 (28 (9) (32)) (70 (52) (10))) (total-hijos tree) Page 2
26 Clase 6 de prácticas: Estructuras de datos recursivas (listas y árboles) 6 3. Ejercicio 3 Vamos a considerar que un árbol binario es estrictamente balanceado cuando todos sus nodos hoja están a la misma profundidad. Define un procedimiento (balanceado-estricto-btree? btree) que reciba un árbol binario como parámetro y devuelva #t si el árbol es estrictamente balanceado y #f si no lo es. 4. Ejercicio 4 (ampliación) Define el procedimiento reverse-tree que reciba un árbol como parámetro y devuelva todas sus ramas invertidas. Ejemplo: tree (40 (28 (9) (32)) (70 (52) (102))) (reverse-tree tree) (40 (70 (102) (52)) (28 (32) (9))) (reverse-tree '(1 (2) (3 (5) (6)) (4))) (1 (4) (3 (6) (5)) (2)) Puedes utilizar el procedimiento reverse-list que devuelve la inversa de una lista: (define (reverse-list lista) (if (null? lista) nil (append (reverse-list (cdr lista)) (list (car lista))))) 5. Ejercicio 5 (ampliación) Escribe el procedimiento (evaluador expr) que tome un árbol de expresiones Page 3
27 Clase 6 de prácticas: Estructuras de datos recursivas (listas y árboles) matemáticas como argumento y devuelva el resultado. (evaluador '(+ (2) (3) (- (3) (4)))) 4 (evaluador '(+ (* (2) (/ (6) (3)) (5)) (20))) 40 (evaluador '(+ (3))) 3 (evaluador '(- (10) (+ (28) (* (-10) (3))))) 12 Puedes ayudarte del siguiente procedimiento: (define (operator op) (cond ((equal? op '+) +) ((equal? op '-) -) ((equal? op '*) *) ((equal? op '/) /) (else (error 'Operador desconocido: ' op)))) 6. Normas de entrega Fecha de entrega: durante la semana del 23 al 26 de abril, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2 y 3 Soluciones a los ejercicios 1, 2 y 3 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 4 y 5 Soluciones a los ejercicios 4 y 5 cargadas en el ordenador. Page 4
28 Clase 7 de prácticas: Macros Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio 4 (ampliación) Ejercicio 5 (ampliación) Normas de entrega... 4
29 Clase 7 de prácticas: Macros 1. Ejercicio 1 La siguiente definición de and es incorrecta: (define-syntax my-and (syntax-rules () ((_) #t) ((_ e1 e2...) (if e1 (my-and e2...) #f)))) La expresión (my-and (not (= x 0)) (/ 1 x)) deberia devolver (/ 1 x) cuando x no es cero, ya que asi es el funcionamiento de and, y sin embargo devuelve otro valor. Escribe la expansión de (my-and (not (= x 0)) (/ 1 x)) y explica por qué es incorrecta esta versión. A continuación escribe la versión corregida. 2. Ejercicio 2 let* es similar a let pero evalua sus declaraciones en secuencia, de manera que en una se pueden utilizar los valores declarados en el mismo conjunto de declaraciones (bindings). Ejemplo: (let* ((a 5) (b (+ a a)) (c (+ a b))) (list a b c)) ( ) let* se podria implementar como expresiones let anidadas. Por ejemplo, la expresión let* anterior se podria expresar como: (let ((a 5)) (let ((b (+ a a))) (let ((c (+ a b))) (list a b c)))) ( ) Define my-let* (para no sobreescribir let* de Scheme) utilizando define-syntax. 3. Ejercicio 3 Implementa la macro list-of con la sintaxis (list-of rango [with predicado]) que devuelva una lista con los números definidos en el rango de valores que cumplan el Page 2
30 Clase 7 de prácticas: Macros predicado opcional. El rango se define con la sintaxis "<" inferior ":" superior ">". Los siguientes ejemplos ilustran su funcionamiento (list-of < 10 : 15 >) -> '( ) (list-of < 10 : 15 > with pair?) -> '( ) 4. Ejercicio 4 (ampliación) Implementa la macro mi-switch con la sintaxis: (mi-switch expr (case test1 expr1) (case test2 expr2)...) (mi-switch expr (case test1 expr1) (case test2 expr2)... (default exprn)) mi-switch evalúa la expresión expr y compara su resultado con la evaluación de los tests, devolviendo la evaluación de la expresión asociada al primer test que coincida con el resultado. En el caso de que ningún test coincida con el resultado pueden ocurrir dos cosas: si aparece la palabra default se devolverá su expresión asociada, pero si no aparece default se devolverá #f. Ejemplos: (define x 2) (mi-switch x (case 1 'uno) (case 2 'dos)) dos (mi-switch x (case 1 'uno) (case 2 'dos) (default 'nada)) dos (mi-switch x (case 1 'uno) (case 3 'tres) (default 'nada)) nada (mi-switch x (case 1 3) (case 3 3)) #f (mi-switch (+ x 1) (case (- 4 1) 3) (case (/ 2 0) 2)) 3 5. Ejercicio 5 (ampliación) Implementa la macro mi-if con la sintaxis: (mi-if expr expr_then) (mi-if expr expr_then expr_else) Se puede ver su funcionamiento con los siguientes ejemplos: (mi-if (= 2 3) 4) #f (mi-if 2 4) Page 3
31 Clase 7 de prácticas: Macros 4 (mi-if (= 1 1) 4) 4 (mi-if (= 2 3) 4) (mi-if (= 2 3) 4 5) 5 6. Normas de entrega Fecha de entrega: durante la semana del 30 de abril al 4 de mayo, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2 y 3 Soluciones a los ejercicios 1, 2 y 3 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 4 y 5 Soluciones a los ejercicios 4 y 5 cargadas en el ordenador. Page 4
32 Clase 8 de prácticas: Construcción de tipos de datos Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio Ejercicio 5 (ampliación) Ejercicio 6 (ampliación) Normas de entrega... 6
33 Clase 8 de prácticas: Construcción de tipos de datos Vamos a construir una libreria geométrica en Scheme! 1. Ejercicio 1 Implementa los tipos de datos circulo2d y rectangulo2d para la estrategia que tú elijas (sólo una) entre datos etiquetados (implementando todas las funciones o utilizando programación dirigida por los datos) o paso de mensajes con la siguiente sintaxis: (make-circulo2d x y radio): donde x,y indican las coordenadas del centro del círculo. (make-rectangulo2d x y base altura): donde x,y indican las coordenadas del punto inferior izquierdo del rectángulo. (make-rectangulo2d x1 y1 x2 y2): donde x1,y1 indican las cordenadas del punto inferior izquierda del rectángulo y x2,y2 las del punto superior derecha. Selectores: (posx obj-geom) (posy obj-geom) (tipo obj-geom) 2. Ejercicio 2 Todo objeto geométrico 2d abarca dos intervalos, uno en el eje x y otro en el eje y. Un intervalo se representa por dos números, un número mínimo y un número máximo. Page 2
34 Clase 8 de prácticas: Construcción de tipos de datos Implementa el tipo de dato intervalo2d con la siguiente sintaxis: (make-intervalo2d min max) Selectores: (min intervalo2d) (max intervalo2d) 3. Ejercicio 3 Para mostrar gráficos por pantalla, Scheme dispone de un paquete de enseñanza llamado draw.ss. Después de añadirlo mediante la opción del menu Lenguaje->Añadir un paquete de enseñanza, implementa el procedimiento genérico (draw-obj obj-geom) para los tipos de dato rectangulo2d y circulo2d. Deberá dibujar el obj-geom pasado como argumento. Ejemplos de utilización del paquete draw.ss: ;Para abrir el canvas (zona de dibujo) de tamaño 500x500: (start ) ;Para dibujar un círculo en la posición ( ) de radio 50 y color Page 3
35 Clase 8 de prácticas: Construcción de tipos de datos rojo: (draw-solid-disk (make-posn ) 50 'red) ;Para dibujar un rectángulo en la posición ( ) con anchura 30 y altura 70 y color azul: (draw-solid-rect (make-posn ) 'blue) ;make-posn es un tipo de dato predefinido que crea una posición pasándole las coordenadas X,Y como argumento. ; Para dibujar una línea desde la posición (50 50) a la ( ) en color negro: (draw-solid-line (make-posn 50 50) (make-posn ) 'black) 4. Ejercicio 4 Implementa los siguientes operadores al tipo de dato intervalo2d: (solapan? intervalo1 intervalo2): Predicado que comprueba si dos intervalos comparten un mismo rango. Devuelve #t si se solapan y #f en caso contrario. (interseccion intervalo1 intervalo2): Devuelve un intervalo compuesto por la intersección de dos intervalos. (suma intervalo1 intervalo2): Devuelve el intervalo comprendido entre el mínimo y el máximo de los intervalos. Ejemplos: Page 4
36 Clase 8 de prácticas: Construcción de tipos de datos 5. Ejercicio 5 (ampliación) Implementa las siguientes funciones genéricas a todos los objetos geométricos utilizando los operadores de intervalo2d: (intervalo-x obj-geom): Devuelve el intervalo que abarca el objeto geométrico obj-geom en el eje x. (intervalo-y obj-geom): Devuelve el intervalo que abarca el objeto geométrico obj-geom en el eje y. (intersectan? obj-geom1 obj-geom2): Devuelve #t si los objetos geométricos pasados como argumento intersectan en algún punto, #f en caso contrario. (rectangulo-interseccion obj-geom1 obj-geom2): Devuelve el Page 5
37 Clase 8 de prácticas: Construcción de tipos de datos rectángulo2d de la intersección de los dos objetos geométricos pasados como argumento. Si no intersectan devuelve null. Ejemplo: Nota: Para simplificar la implementación no consideramos los círculos como tales, sino que los aproximamos por el cuadrado donde se inscriben. 6. Ejercicio 6 (ampliación) Implementa un procedimiento genérico que calcule el bounding-box de n figuras (utiliza para ello las listas impropias). Deberá funcionar de forma genérica para cualquier tipo de objeto 2d. Para ello utiliza sus selectores. La sintaxis será la siguiente: (bounding-box obj-geom-1... obj-geom-n) donde obj-geom-1 y obj-geom-n podrán ser indistintamente circulo2d y/o rectangulo2d. El procedimiento debe devolver un rectangulo2d que englobe a todas figuras. Ejemplos: Nota: Te puede ayudar la utilización del tipo de dato intervalo2d. 7. Normas de entrega Fecha de entrega: durante la semana del 14 al 18 de mayo, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Page 6
38 Clase 8 de prácticas: Construcción de tipos de datos Papel con las soluciones de los ejercicios 1, 2, 3 y 4 Soluciones a los ejercicios 1, 2, 3 y 4 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 5 y 6 Soluciones a los ejercicios 5 y 6 cargadas en el ordenador. Page 7
39 Clase 8 de prácticas Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio 4 (Ampliación) Ejercicio 5 (Ampliación) Ejercicio 6 (Ampliación) Normas de entrega... 3
40 Clase 8 de prácticas 1. Ejercicio 1 Escribe un procedimiento fib que, cada vez que se llame, devuelva el siguiente número de la serie de Fibonacci, empezando en 1. (fib) --> 1 (fib) --> 2 (fib) --> 3 (fib) --> 5 (fib) --> Ejercicio 2 En el modelo de evaluación de sustitución el primer paso para evaluar una expresión es evaluar sus subexpresiones. Pero el orden en el que las subexpresiones tienen que evaluarse (de izquierda a derecha o de derecha a izquierda) no se especifica (porque no importa). Cuando introducimos asignación (en programación imperativa), el orden en el que se evaluan los argumentos de un procedimiento puede variar el resultado. Basándote en esta idea, implementa un procedimiento f de forma que la evaluación de (+ (f 0) (f 1)) devuelva 0 si los argumentos de + se evaluan de izquierda a derecha, y devuelva 1 si se evaluan de derecha a izquierda. 3. Ejercicio 3 Dibuja el diagrama de entorno generado por las siguientes expresiones y explícalo detalladamente: (define b 8) (let ((b 15) (a (+ b 2))) (set! b (+ a 5)) b) 4. Ejercicio 4 (Ampliación) Implementa un procedimiento llamado parkimetro que simule una máquina de control de parking con las siguientes consideraciones: Se paga con tarjeta de credito y el importe lo elige el usuario. Cuesta 0.01 /minuto. El medidor es digital. El usuario puede consultar el tiempo que le queda. Proporciona una Page 2
41 Clase 8 de prácticas manera para poder consultarlo. Al dueño del parking le interesa saber cuánto dinero ha recogido un determindo parkimetro. Proporciona una manera para devolver la cantidad total recaudada. Cuando el tiempo ha llegado a 0, un mensaje llamado "multar" deberia devolver #t. Se utiliza para saber quién necesita un nuevo ticket. El tiempo se decrementa manualmente con un mensaje llamado "tick" (simula el tick de reloj). 5. Ejercicio 5 (Ampliación) Dibuja el siguiente diagrama de entorno y explícalo detalladamente: (define x 2) (define (changer x y) (y) (y) x) (changer 16 (lambda () (set! x (* x x)))) 6. Ejercicio 6 (Ampliación) Escribe una única instrucción en Scheme, que no use mutación, que genere el siguiente diagrama de entorno: 7. Normas de entrega Fecha de entrega: durante la semana del 21 al 25 de mayo, en la sesión correspondiente a tu turno de prácticas. Page 3
42 Clase 8 de prácticas Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2 y 3 Soluciones a los ejercicios 1 y 2 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 4, 5 y 6 Solución al ejercicio 4 cargada en el ordenador. Page 4
43 Clase 10 de prácticas: Tipos de datos mutables Índice 1 Ejercicio Ejercicio Ejercicio Ejercicio 4 (Ampliación) Ejercicio 5 (Amplicación) Ejercicio 6 (Amplicación) Normas de entrega... 4
44 Clase 10 de prácticas: Tipos de datos mutables 1. Ejercicio 1 Tenemos el siguiente procedimiento para añadir listas: (define (append x y) (if (null? x) y (cons (car x) (append (cdr x) y)))) append forma una lista nueva formando sucesivamente nuevas parejas de elementos de x con elementos de y. El procedimiento append! es similar a append, pero es un mutador, no un constructor. Añade las listas modificando el final de la última pareja de x para que su cdr sea ahora y. (Sería un error llamar a append! con un x vacío.) (define (append! x y) (set-cdr! (last-pair x) y) x) Donde last-pair es un procedimiento que devuelve la última pareja de su argumento: (define (last-pair x) (if (null? (cdr x)) x (last-pair (cdr x)))) Considera las siguientes instrucciones: (define x (list 'a 'b)) (define y (list 'c 'd)) (define z (append x y)) z -> (a b c d) (cdr x) -> define w (append! x y)) w -> (a b c d) (cdr x) -> Rellena los huecos y a continuación dibuja diagramas de caja y puntero para explicar las respuestas. 2. Ejercicio 2 Qué argumentos de las dos llamadas a set-cdr! que vemos abajo producen los efectos indicados en list1 y list2? No debes crear nuevas parejas, sólo modificar los punteros a las ya existentes. Rellena los espacios en blanco y dibuja los diagramas de caja y puntero Page 2
45 Clase 10 de prácticas: Tipos de datos mutables asociados a las listas (list1 y list2) antes y después de haber ejecutado las dos llamadas a set-cdr!. (define list1 (list (list 'a) 'b)) (define list2 (list (list 'x) 'y)) (set-cdr! ) (set-cdr! ) list1 ((a x b) b) list2 ((x b) y) A continuación dibuja un diagrama de caja y puntero que explique el efecto de evaluar la expresión: (set-car! (cdr list1) (cadr list2)) 3. Ejercicio 3 Escribe un procedimiento filter-olist! que tome una lista con cabecera y un predicado como argumento, y elimine los elementos de la lista que no satisfagan el predicado. (define lista (list '*list* )) (filter-olist! lista odd?) l1 (*list* ) 4. Ejercicio 4 (Ampliación) Escribe el procedimiento (subst-btree! tree old new) que tome un árbol binario y dos elementos como argumento, y mute el árbol binario de forma que cada ocurrencia de old se sustituya por new. 5. Ejercicio 5 (Amplicación) Escribe el procedimiento (reverse-olist! ols) que tome una lista con cabecera como argumento, y mute la lista de forma que quede invertida. lista (*list* ) (reverse-list! lista) lista Page 3
46 Clase 10 de prácticas: Tipos de datos mutables (*list* ) 6. Ejercicio 6 (Amplicación) Define el procedimiento (reverse-tree! tree) que mute el árbol genérico tree y lo devuelva invertido. tree (1 (2) (3 (5) (6)) (4)) (reverse-tree! tree) tree (1 (4) (3 (6) (5)) (2)) 7. Normas de entrega Fecha de entrega: durante la semana del 28 al 31 de mayo, en la sesión correspondiente a tu turno de prácticas. Material a entregar para conseguir hasta 0,5 puntos: Papel con las soluciones de los ejercicios 1, 2 y 3 Soluciones a los ejercicios 1, 2 y 3 cargadas en el ordenador, para que el profesor de prácticas pueda evaluarlas Material a entregar para conseguir hasta 1 punto: Material para conseguir 0,5 puntos Papel con las soluciones de los ejercicios 4, 5 y 6 Soluciones a los ejercicios 4, 5 y 6 cargadas en el ordenador. Page 4
Clase 1 de prácticas: Introducción a Scheme
Clase 1 de prácticas: Introducción a Scheme Índice 1 Ejercicio 1... 2 2 Ejercicio 2... 2 3 Ejercicio 3... 2 4 Ejercicio 4... 3 5 Ejercicio 5... 3 6 Ejercicio 6... 4 7 Ejercicio 7 (ampliación)...4 8 Ejercicio
Tema 6: Estructuras de datos recursivas
Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura
GUÍA BÁSICA DE SCHEME v.4
Esta guía básica pretende ser una introducción elemental al lenguaje de programación Scheme. Se presenta como una guía de comienzo rápido de tal forma que permita conocer de una forma muy esquemática los
Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca
Aplicación de la Inducción Matemática Programación Funcional Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca Motivación Programación Imperativa Declarativa Procedimental Ejemplo:
Tema 4.- Recursión e iteración
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
Tema 3.- Predicados y sentencias condicionales
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
Lenguajes de Programación Programación funcional
Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una
Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
Tema 4: Programación funcional avanzada en Scheme
Tema 4: Programación funcional avanzada en Scheme Índice 1 Let... 2 2 Let*... 5 3 Letrec... 5 4 Quote...6 5 Eval... 7 6 Datos compuestos: parejas...8 7 Los datos compuestos pueden ser funciones...11 8
Programación Declarativa
Programación Declarativa Tema 2: LISP (SCHEME) 2 Tema 2: LISP (SCHEME) Introducción Representación de Datos Definición de Funciones Predicados Listas 3 Introducción (I) SCHEME es un dialecto de LISP (LISt
Ejercicios Scheme. Para cada función escriba su contrato, descripción, ejemplos y los tests necesarios, antes de su implementación.
Ejercicios Scheme Para cada función escriba su contrato, descripción, ejemplos y los tests necesarios, antes de su implementación. 1 Para soltar la mano 1. Represente la siguiente expresión en Scheme:
ESTRUCTURAS DE DATOS Y ALGORITMOS
ESTRUCTURAS DE DATOS Y ALGORITMOS CURSO 2009 PRÁCTICO 8 Nota: al igual que en los prácticos 6 y 7, en los problemas que siguen se usarán los tipos lista y árbol binario, como tipos abstractos, cada uno
Tema 3: Características de la programación funcional. Sesión 5: El paradigma funcional (1)
Tema 3: Características de la programación funcional Sesión 5: El paradigma funcional (1) Referencias Capítulo 1.1.5 SICP: [[http://mitpress.mit.edu/sicp/full-text/book/book-z- H-10.html#%_sec_1.1.5][The
Tema 2: Introducción a Scheme. Sesión 4: Introducción a Scheme (2)
Tema 2: Introducción a Scheme Sesión 4: Introducción a Scheme (2) Referencias DrRacket (http://racket-lang.org/) A brief tour of DrScheme (http://www.plt-scheme.org/software/drscheme/ tour/) Structure
Tema 2.- Expresiones y funciones
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
4.3 Recursión en Scheme
4.3 Recursión en Scheme Recursión simple y asignación Recursión Simple Un procedimiento recursivo es aquel se aplica a si mismo. Ejemplo: (define length (lambda (ls (if (null? ls 0 (+ 1 (length (cdr ls
2º Certamen ILI-253 Lenguajes de Programación Juan Pablo Menichetti Jorge Mujica 10 de Junio del 2004
º Certamen ILI-53 Lenguajes de Programación Juan Pablo Menichetti Jorge Mujica 10 de Junio del 004 ta: Tiempo: 10 Minutos. Responda con lápiz indeleble para acceder a recorrecciones. Utilice solo las hojas
Abstracción de Datos y
Capítulo 3 Abstracción de Datos y Números El cómputo numérico ha sido tradicionalmente ignorado por la comunidad de Lisp. Hasta antes del Common Lisp nadie había ideado una estrategia detallada para ordenar
Programación Funcional en LISP Lógica para Ciencias de la Computación
Programación Funcional en LISP Lógica para Ciencias de la Computación Primer Cuatrimestre de 2009 Material Adicional Introducción A lo largo de la carrera estudiaremos diversos paradigmas de programación:
Estructura de datos y de la información Boletín de problemas - Tema 10
Estructura de datos y de la información Boletín de problemas - Tema 10 1. En el caso de que sea posible, dar un ejemplo de los siguientes puntos. Si no, explicar por qué no lo es. Considerar un valor genérico
4.7 Operaciones sobre Objetos en Scheme
4.7 Operaciones sobre Objetos en Scheme Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores Ejemplos de Equivalencia (eq? a a) ;=> #t (eq? 3.1 3.1) ;=> () (eq? (cons a
Tema 5.- Tipos de datos compuestos
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMAC CIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO
Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional
Programación Funcional Lisp-DrScheme Primera Parte Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional Programación Funcional! La programación funcional es un paradigma de programación
Inducción, Recursión y Alcance. Inducción, Recursión y alcance. Inducción, Recursión y Alcance. Inducción, Recursión y Alcance
Inducción, Recursión y alcance Especificación inductiva de tipos de datos Tipo de datos: Conjunto de valores Conjunto de operaciones sobre dichos valores ejemplo: Sea S el conjunto más pequeño tal que:
Programación Funcional Lisp-Scheme
Programación Funcional Lisp-Scheme Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional Dónde bajar? Lisp (EdScheme): www.schemers.com com Ejemplo: => (+ (* 3(+ (* 24) (+ 35))) (+
Tipos de datos algebraicos
Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:
Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: La prueba es individual y sin material. La duración es 3 horas.
Ejercicios sobre recursividad
Ejercicios sobre recursividad 11 de febrero de 2003 1. Implementa una función recursiva que devuelva la suma de los dígitos de un número natural, que se le pasa por parámetro. 2. Implementa una función
1. Escriba el siguiente código, compílelo y ejecútelo. Obtiene el resultado esperado? Modifíquelo para que se comporte como debe:
Boletín 2 1. Escriba el siguiente código, compílelo y ejecútelo. Obtiene el resultado esperado? Modifíquelo para que se comporte como debe: int i, j; scanf("%d%d",&i,&j); if (i = j) printf("los números
Examen de Traductores, Intérpretes y Compiladores. Convocatoria ordinaria de Junio de er Curso de I.T. Informática de Sistemas.
Examen de Traductores, Intérpretes y Compiladores. Convocatoria ordinaria de Junio de 2001 3 er Curso de I.T. Informática de Sistemas. Apellidos, Nombre: Calificación: PRÁCTICA Con el presente problema,
Tema 4: Procedimientos y estructuras recursivas
Tema 4: Procedimientos y estructuras recursivas Contenidos 1. Recursión 1.1 Pensando recursivamente 1.2 El coste de la recursión 1.3 Soluciones al coste de la recursión: procesos iterativos 1.4 Soluciones
$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos
PROGRAMACIÓN DE SHELL SCRIPTS EN LINUX El shell es un intérprete de órdenes, pero el shell no es solamente eso; los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como tales,
Tarea Número 6: Condicionales
Tarea Número 6: Condicionales Andrés Felipe Barco Santa Introducción a la Prorgamación Departamento de Electrónica y Ciencias de la Computación 29 de agosto de 2012 1. Ejercicios a realizar Para cada uno
2.2 CREAR TABLAS Y GRÁFICOS.
2.2 CREAR TABLAS Y GRÁFICOS. INSERTAR UNA TABLA Y DARLE FORMATO La forma más habitual de comenzar a trabajar con tablas es a través de la ficha Insertar, tabla. A continuación Word le ofrece las siguientes
Generación de Código Intermedio
Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede
Cadenas de caracteres
Trabajo práctico Nº 6 (Trabajos con cadenas de caracteres y estructuras) Realiza el programa en Lenguaje C correspondiente. Cadenas de caracteres 1- Construir una función PASSWORD que pida por teclado
LISTAS ENLAZADAS FUNDAMENTOS TEORICOS
LISTAS ENLAZADAS FUNDAMENTOS TEORICOS Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un «enlace»
Programación Declarativa. Ingeniería Informática Cuarto curso. Primer cuatrimestre. Escuela Politécnica Superior de Córdoba Universidad de Córdoba
Programación Declarativa Ingeniería Informática Cuarto curso. Primer cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2016 2017 Práctica número 1.- Introducción
Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos
Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende
Programación Orientada a Objetos Curso 2014/2015. Práctica 11
Objetivos formativos Previo Programación Orientada a Objetos Curso 2014/2015 Práctica 11 - Nuevas características de Java 8: expresiones lambda, interfaces funcionales, streams. - Crea el paquete practica11
GUÍA DE LABORATORIO #3 ESTRUCTURAS ALGORÍTMICAS CONDICIONALES SIMPLES, DOBLES Y MÚLTIPLES
GUÍA DE LABORATORIO #3 ESTRUCTURAS ALGORÍTMICAS CONDICIONALES SIMPLES, DOBLES Y MÚLTIPLES OBJETIVO: Realizar programas en Lenguaje C aplicando las estructuras condicionales. TEMPORIZACIÓN: Inicio de la
Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.
Ejercicios Resueltos del Práctico 4 Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. 1 2 struct NodoLista { 3 int elem ; 4 NodoLista * sig ;
ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF
ESCUELA POLITÉCNICA SUPERIOR GRADO EN DISEÑO IND. INFORMÁTICA CURSO 2012-13 PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF HASTA AHORA... En prácticas anteriores se ha aprendido: La estructura principal de un
Programación 1 - Práctica 0, recargada.
v.6.2.1 Programación 1 - Práctica 0, recargada. Ahora con más ejercicios! 1 Expresiones aritméticas. 1. Considere las siguientes expresiones aritméticas: 12 * 5-7 * 6 3 * 5-7 * 4 / 14 + 3 / 1 cos(0.8)
Bloque II. Elementos del lenguaje de programación Java
Bloque II. Elementos del lenguaje de programación Java 1.Introducción a los lenguajes de programación 2. Estructura de un programa 3. Datos y expresiones simples 4. Instrucciones de control 5. Entrada/salida
INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION
INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION DIIAGRAMAS DE FLUJO Un diagrama de flujo es un dibujo que utiliza símbolos estándar de diagramación de algoritmos para
El lenguaje C. 1. Identificadores, constantes y variables
Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria
Segundo parcial de Programación 2
Generalidades: Segundo parcial de Programación 2 a. La prueba es individual y sin material. b. La duración es 3hs. c. Sólo se contestan dudas acerca de la letra. 8 de Julio de 2016 d. Escriba las hojas
Resumen de LISP. Javier Gil Julio, 2011
Resumen de LISP Javier Gil Julio, 2011 ; conceptos fundamentales de Lisp ; sintaxis basica (+ 2 3) (* 2 (+ 4 6)) (+ 2/7 7/67) (/ #c(2 3) 6/4) ; operadores matematicos basicos (+ 2 3) (- 8 6) (* 2/7 6/5)
Algoritmo, Estructuras y Programación I Ing. Marglorie Colina
Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona
Universidad Autónoma del Estado de México Facultad de Medicina
Universidad Autónoma del Estado de México Facultad de Medicina Licenciatura en Bioingeniería Médica Unidad de Aprendizaje: Algoritmos y programación básica Unidad 3: Estructuras de control de flujo en
Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO
Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características
Tema: Autómatas de Estado Finitos
Compiladores. Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Autómatas de Estado Finitos Contenido En esta guía se aborda la aplicación de los autómatas en el campo de
Algoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Introducción Un árbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos. A B C D E F G H I J K Clasificación con respecto a su relación: Nodo hijo: cualquiera de los nodos
Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2
Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Diseño de algoritmos recursivos 1. Dado un vector de enteros de longitud N,
1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el pseudocódigo de un programa que lo resuelva:
1.- Para cada uno de los siguientes problemas escribir el diagrama de flujo y el a) Problema: pedir la base y la altura de un triángulo y escribir su superficie. b) Problema: pedir cuatro números enteros
Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre
Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre Ingeniería Técnica en Informática de Gestión Ingeniería Técnica en Informática de Sistemas Escuela Politécnica Superior Universidad
PROCESSING. El interfaz del programa es el siguiente: Antes de iniciar su utilización, hay que saber algunos aspectos importantes.
PROCESSING Processing es un IDE (Integrated Development Environment Entorno de Desarrollo Integrado), software que se encarga de traducir el lenguaje humano en el lenguaje máquina. El interfaz del programa
Estatutos de Control C# Estatutos de Decisión (Selección)
SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente
1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)
1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Práctica 1 1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:?
UNIDAD II: ESTRUCTURAS SECUENCIALES
201 2015 UNIDAD II: I ESTRUCTURAS SECUENCIALES Departamento de Computación UNAN-León 2.1 INTRODUCCIÓN: UNIDAD II: ESTRUCTURAS SECUENCIALES La estructura secuencial permite representar aquellas instrucciones
Tipos de datos y Operadores Básicos
Módulo I: Conceptos Básicos Tema 1. Qué es un ordenador? Tema 2. Cómo se representan los datos en un ordenador? Tema 3. Qué es un lenguaje de programación? Tema 4. Cómo se hace un programa informático?
Lenguajes de Programación
Lenguajes de Programación Tipos de datos abstractos Apareamiento de patrones y gramáticas Manuel Soto Romero Universidad Nacional Autónoma de México Facultad de Ciencias 30 de agosto de 2017 Manuel Soto
Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO
Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características
Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani
Informática JavaScript: Lenguaje de programación Fco J. Martín Mateos Carmen Graciani Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal:
Nano Taller de Python
Charla 5: Programación Funcional Royal Institute of Technology (KTH), Estocolmo, Suecia Grupo de Nanomateriales (GNM), Santiago, Chile 13 de enero 2009, de 13:00 a 14:00 Parte I Programación
Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.
Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos
Funciones y Condicionales Introducción a la Programación
Funciones y Condicionales Introducción a la Programación Departamento de Ciencias e Ingeniería de la Computación Pontificia Universidad Javeriana Santiago de Cali 2011-2 Resumen En el mundo existen gran
Dobles: Es el caso de la instrucción if-else (punto 1.2).
1 1.Introducción Las estructuras de control son instrucciones que nos permiten controlar el flujo de ejecución del programa. Las instrucciones de control se pueden agrupar en instrucciones condicionales
Trabajo Práctico 6 Funciones, Procedimientos y División de Problemas
Trabajo Práctico 6 Funciones, Procedimientos y División de Problemas Ejercicio 1: Considere definida la función Invertir. function Invertir( num: integer ):integer; {Objetivo: Invierte el orden de los
4. Operadores Operador asignación
Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre
n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!
Capítulo 3 Recursión La recursión es un estilo autoreferencial de definición usado tanto en matemática como en informática. Es una herramienta de programación fundamental, particularmente importante para
Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo
Tipos de datos. Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo Valores Constantes: Es un dato que se introduce directamente en
Árboles de Decisión Árboles de Sintaxis
Árboles de Decisión Árboles de Sintaxis Estructuras de Datos Andrea Rueda Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas Árboles de Decisión Árbol de Decisión Forma gráfica de
Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:
Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Justificación: Se pretende con éste contribuir a que el alumno se inicie y conozca el entorno del IDE en la creación de pequeños programas en java Objetivos:
UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM
UNIDAD IV Programación Funcional Porqué? 2 Introducción Porque aprender programación funcional? - Recursión - Abstracción funcional - Funciones de primer orden Estos conceptos se han incorporado en la
Práctica N o 4 - Programación Lógica
Práctica N o 4 - Programación Lógica Para resolver esta práctica, recomendamos usar el SWI-Prolog, de distribución gratuita, que puede bajarse de http://www.swi-prolog.org. No utilizar cut (!) ni predicados
Manual de Lisp para IACS (Curso 91 92)
Dpto. de Álgebra, Computación, Geometría y Topología Universidad de Sevilla Manual de Lisp para IACS (Curso 91 92) Sevilla, 1992 Contenido 1 Introducción 1 1.1 Introducción............................
TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.
Tema 2. TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. PARTE : VARIABLES, OPERADORES Y CONSTANTES.. INTRODUCCIÓN AL LENGUAJE C 2. PROGRAMAS BÁSICOS EN LENGUAJE C 3. DATOS EN LENGUAJE C
Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28
Componentes Básicos InCo InCo Componentes Básicos 1 / 28 Modelo de Computación Vemos al computador como un procesador de datos. +------------+ Entrada ===> Computador ===> Salida +------------+ InCo Componentes
Tema 3: Recursión. Índice
Índice 1 Recursión... 2 2 Confía en la recursión... 2 3 El coste espacial de la recursión... 5 4 Procesos recursivos e iterativos... 7 4.1 Ejemplos...10 5 Referencias...12 1. Recursión Ya hemos visto algunos
Estructuras de control
Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando
Apellidos:... Nombre:...
Apellidos:....................................... Nombre:........................................ Introducción a la Inteligencia Artificial 1 er Parcial de Teoría 12 Noviembre 2004 Ejercicio 1: Responder
Sentencias de Procesamiento Iterativo: while y do-while
ESTRUCTURAS CÍCLICAS Se discuten en este documento las sentencias que se utilizan en el lenguaje C++ para representar la tercera de las estructuras utilizadas en la programación estructurada: La Estructura
A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -
Trabajo práctico Nº 7 (Resolución de problemas Estructura: pila y cola). Realiza el programa de cada situación problemática. 1- Cargar en una pila n letras del abecedario.(n debe ser menor a 30) 2- En
GENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA)
Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público
Práctica 1 de Excel (Curso )
Práctica 1 de Excel (Curso 2009-2010) Definición: Excel es una aplicación del tipo hoja de cálculo, integrada en el entorno Windows y desarrollada por Microsoft, en la cual se combinan las capacidades
Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7
Estructuras selectivas Programación I Ingeniería Técnica Informática Ejercicios de los Temas 4, 5, 6 y 7 24.- Elabore un programa para determinar si una hora leída en la forma horas, minutos y segundos
