Tema 3: Características de la programación funcional
|
|
- Sofia Rivas Valdéz
- hace 5 años
- Vistas:
Transcripción
1 Tema 3: Características de la programación funcional Sesión 5: El paradigma funcional (1) martes 22 de febrero de 2011 Referencias Capítulo SICP: [[ H-10.html#%_sec_1.1.5][The Substitution Model for Procedure Application]] Capítulo 10 PLP: Functional Languages martes 22 de febrero de 2011
2 Hoy veremos Historia del paradigma funcional Características del paradigma funcional puro Modelo de computación basado en sustitución martes 22 de febrero de 2011 Orígenes históricos Raíces teóricas, antes de aparecer los ordenadores 1930s: Alan Turing, Alonzo Church, Stephen Kleene, Emil Post, etc. Turing: Máquina de Turing, programación imperativa Kleene y Post: métodos abstractos, sustituciones algebraicas Church: Cálculo lambda, programación funcional Modelo de cálculo lambda basado en la definición de funciones y la aplicación de estas funciones a argumentos martes 22 de febrero de 2011
3 Conceptos de la programación funcional En un sentido estricto, la programación funcional define un programa como una función matemática que convierte unas entradas en unas salidas, sin estado interno ni efectos laterales Lenguajes funcionales puros: Miranda, Haskell, ph, Sisal, ML... (1958, John MacCarthy). LISP es el primer lenguaje de alto nivel basado en el paradigma funcional LISP no es programación funcional pura, tienen algunas instrucciones imperativas que permiten estado local y efectos laterales LISP lenguaje revolucionario, introduce nuevos conceptos: funciones como objetos primitivos, funciones orden superior, polimorfismo, listas, recursión, símbolos, homogeneidad de datos y programas, bucle read-eval-print martes 22 de febrero de 2011 Características de la programación funcional Programación declarativa: no hay asignación ni cambio de estado no hay referencias: identificadores asociados a valores no hay efectos laterales Recursión Funciones como tipos de datos primitivos martes 22 de febrero de 2011
4 Programación declarativa vs imperativa Programación imperativa: pasos de ejecución y estado de variables int x = x + 1; int y = y + 3; (define (cuadrado x) (* x x)) Ejemplo de estado local (no existe en programación declarativa): int function contador () { static int c = 0; } c++; return c; contador(): 1 contador(): 2 contador(): 3 martes 22 de febrero de 2011 Programación declarativa vs imperativa Programación declarativa: Dentro del ámbito de declaración de las variables x1 xn todas las ocurrencias de una expresión e que contiene únicamente las variables x1 xn tienen el mismo valor. Consecuencia: optimización. Si una expresión e aparece en varios lugares dentro de un mismo ámbito, sólo es necesario evaluarla una vez. (define (f x)...) (+ (f 2) (f 2)) (define (f x)...) (define y (f 2)) (+ y y) Una función llamada con los mismos argumentos siempre devuelve el mismo resultado martes 22 de febrero de 2011
5 Modelo de computación de sustitución Un modelo computacional es un formalismo (conjunto de reglas) que definen el funcionamiento de un programa. En los lenguajes funcionales basados en la evaluación de expresiones, el modelo computacional define cuál va a ser el resultado de evaluar una determinada expresión. El modelo de sustitución se basa en una versión simplificada de la regla de reducción del cálculo lambda. martes 22 de febrero de 2011 Modelo de computación de sustitución Reglas para evaluar una expresión e de Scheme: Si e es un valor primitivo, devolver ese mismo valor. Si e es una variable, devolver su valor asociado. Si e es una expresión del tipo (f arg1 argn), donde f el nombre de un procedimiento primitivo (+, -, ), evaluar arg1 argn y aplicar el procedimiento al resultado. Si e es una expresión del tipo (f arg1 argn), donde f es el nombre de un procedimiento compuesto (definido con un define), sustituir f por su cuerpo, reemplazando cada parámetro formal del procedimiento por el correspondiente argumento evaluado. Evaluar la expresión resultante. martes 22 de febrero de 2011
6 Ejemplo modelo de sustitución (define (double x) (+ x x)) (define (square y) (* y y)) (define (f z) (+ square (double z)) 1)) Evaluamos (f (+ 2 1)) con orden aplicativo martes 22 de febrero de 2011 Orden normal vs orden aplicativo Orden aplicativo (Scheme): se evalúan primero los argumentos, luego se sustituye Orden normal: se realizan todas las sustituciones hasta que se tiene una larga expresión formada por expresiones primitivas; se evalúa entonces Evaluamos (f (+ 2 1)) con orden normal En programación funcional el orden normal y el orden aplicativo siempre devolverán el mismo resultado martes 22 de febrero de 2011
7 Orden normal vs orden aplicativo El orden importa si no tenemos programación funcional pura: (define (zero x) (- x x)) (zero (random 10)) martes 22 de febrero de 2011 Simulación en Scheme (load "simply.scm") (load "order.scm") (def (doble x) (+ x x)) (def (cuadrado x) (* x x)) (def (f z) (+ (cuadrado (doble z)) 1)) (applic (f (+ 2 1))) (normal (f (+ 2 1))) martes 22 de febrero de 2011
8 Ejercicios Dada la función: (define (double x) (+ x x)) Evaluar la expresión (double (* 3 4)) en orden aplicativo y en orden normal. Cuál es más eficiente? Dada la función: (define (switch x a b c) (cond ((< x 0) a) ((= x 0) b) ((> x 0) c)))) Evaluar la expresión (switch -1 (+ 1 2) (+ 2 3) (+ 3 4)) en orden aplicativo y en orden normal. Cuál es más eficiente? martes 22 de febrero de 2011
9 Tema 3: Características de la programación funcional Sesión 6: El paradigma funcional (2) miércoles 23 de febrero de 2011 Referencias Capítulo SICP: [[ H-10.html#%_sec_1.1.5][The Substitution Model for Procedure Application]] Capítulo 10 PLP: Functional Languages miércoles 23 de febrero de 2011
10 Hoy veremos Programación funcional en LISP (y Scheme) miércoles 23 de febrero de 2011 Programación funcional en LISP (y Scheme) LISP (y Scheme) no es funcional puro: tiene características que van más allá de la programación declarativa/funcional Algunas características: Funciones como tipos de dato primitivos y funciones de orden superior Polimorfismo Símbolos y dualidad entre datos y programa miércoles 23 de febrero de 2011
11 Funciones como tipos de datos primitivos Las funciones son tipos primitivos en los lenguajes funcionales Un tipo primitivo es aquel que: Puede ser asignado a una variable Puede ser pasado como argumento a una función Puede ser devuelto como resultado de una invocación a una función Puede ser parte de un tipo de dato mayor miércoles 23 de febrero de 2011 Forma especial lambda La forma especial lambda es la forma de Scheme de construir funciones anónimas (sin nombre) en tiempo de ejecución Sintaxis: (lambda <arg1>... <argn>) <cuerpo>) (lambda (x) (* x x)) (lambda (x y) (+ x y)) proc proc Al evaluar lambda, se crea una función sin nombre miércoles 23 de febrero de 2011
12 Función anónima (creada con lambda) Puede ser invocada directamente: ((lambda (x) (* x x)) 3) Es un tipo de dato primitivo, como cualquier otra función miércoles 23 de febrero de 2011 Funciones como tipos de dato primitivos: función asignada a variable Función creada con define: cuadrado (define (cuadrado x)(* x x))) proc Función creada con lambda: (define cubo (lambda (x) (* x x x))) cubo proc miércoles 23 de febrero de 2011
13 Funciones como tipos de datos primitivos: función como argumento de otra función. Ejemplo 1 (define (aplica f x y) (f x y)) (aplica + 2 3) (aplica * 4 5) (aplica string-append "hola" "adios") (aplica (lambda (x y) (sqrt (+ (* x x) (* y y)))) 3 4) miércoles 23 de febrero de 2011 Funciones como tipos de datos primitivos: función como argumento de otra función. Ejemplo 2 (define (aplica-2 f g x) (f (g x))) (define (suma-5 x) (+ x 5)) (define (doble x) (+ x x)) (aplica-2 suma-5 doble 3) (aplica-2 (lambda (x) (* x 2)) (lambda (x) (+ x 10)) 5) miércoles 23 de febrero de 2011
14 Funciones como tipos de datos primitivos: función como valor devuelto por otra función (define (hacer-sumador-k k) (lambda (x) (+ x k))) hacer-sumador-k proc (define g (hacer-sumador-k 5)) (g 10) g proc miércoles 23 de febrero de 2011 Funciones de orden superior Funciones de orden superior: Son funciones que reciben otras funciones como argumento o devuelven una función como resultado Ejemplo, función map: (map cuadrado ( )) (map * (1 2 3) (4 5 6)) Otro ejemplo: map recibe como argumentos una función y tantas listas (de igual longitud) como argumentos tenga la función (define (operar f base lista) (if (null? lista) base (f (car lista) (operar f base (cdr lista))))) miércoles 23 de febrero de 2011
15 Las funciones pueden formar parte de estructuras de datos mayor Ejemplo: lista de funciones (define lista-funcs (list doble suma-5 cuadrado)) Ejemplo de utilización: (define (aplica-funcs lista-funcs x) (if (null? (cdr lista-funcs)) ((car lista-funcs) x) ((car lista-funcs) (aplica-funcs (cdr lista-funcs) x)))) (aplica-funcs lista-funcs 10) miércoles 23 de febrero de 2011 Dualidad entre datos y código Los programas en Scheme son expresiones entre paréntesis Una expresión entre paréntesis es una lista de símbolos Por tanto, los programas (sin evaluar) se pueden considerar como datos (listas) y viceversa y, por tanto, podemos construirlos, desconstruirlos, y manipularlos como las listas Ejemplo: utilizando quote y eval, vamos a sumar una lista de números (define (suma-lista lista-nums) (eval (cons '+ lista-nums))) miércoles 23 de febrero de 2011
16 Ejercicios Qué hace el siguiente código en Scheme? (lambda (f x) (f x x))) Cómo habría que invocar a la función anterior para que devuelva 20? Define una función g que podamos invocar así y devuelva 18: (g (lambda (x) (+ x x)) (lambda (y) (* y y)) 3) Define una función h que se invoque de la siguiente forma y devuelva 6: ((h (lambda (x) (+ x x))) 3) miércoles 23 de febrero de 2011
17 Tema 3: Características de la programación funcional Sesión 7: El paradigma funcional (3) martes 1 de marzo de 2011 Referencias Capítulo 10 PLP: Functional Languages martes 1 de marzo de 2011
18 Hoy veremos Características de la programación funcional en LISP/Scheme martes 1 de marzo de 2011 Características de la programación funcional Evaluación sin efectos laterales: paradigma declarativo y modelo de sustitución Funciones como tipos de datos primitivos: forma especial lambda Ámbitos de variables: forma especial let Dualidad entre datos y programas: formas especiales eval y apply Listas como elemento fundamental de procesamiento Recursión martes 1 de marzo de 2011
19 Ámbito global de variables En Scheme existe un ámbito global de las variables en el que se les da valor utilizando la forma especial define (define a "hola") (define b (string-append "adios" a)) (define cuadrado (lambda (x) (* x x))) martes 1 de marzo de 2011 Ámbito local: forma especial let En Scheme se define la forma especial let que permite crear un ámbito local en el que da valor a variables. Sintaxis: (let ((<var1> <exp-1>)... (<varn> <exp-n>)) <cuerpo>) (let ((x 2) (y 5)) (+ x y)) Las variables var1, varn toman los valores devueltos por las expresiones exp1, expn y el cuerpo se evalúa con esos valores. martes 1 de marzo de 2011
20 let mejora la legibilidad de los programas El uso de let permite abstraer operaciones y dar un nombre a los resultados, aumentando la legibilidad de los programa (define (distancia x1 y1 x2 y2) (let ((dx (- x2 x1)) (dy (- y2 y1))) (sqrt (+ (cuadrado dx) (cuadrado dy))))) martes 1 de marzo de 2011 El ámbito de las variables definidas en el let es local Las variables definidas en el let sólo tienen valores en el ámbito de la forma especial (define x 5) (let ((x 1) (y 2)) (+ x y)) x y martes 1 de marzo de 2011
21 let permite usar variables definidas en un ámbito superior Desde el ámbito definido por el let se puede usar el ámbito superior. Por ejemplo, en el siguiente código se usa la variable z definida en el ámbito superior. (define z 8) (let ((x 1) (y 2)) (+ x y z)) martes 1 de marzo de 2011 Las variables del let pueden asociarse con cualquier valor Un ejemplo en el que definimos funciones de ámbito local: area-triangulo y apotema: (define (area-hexagono lado) (let ((area-triangulo (lambda (base altura) (/ (* base altura) 2))) (apotema (lambda (lado) (* (sqrt 3) (/ lado 2)))))) (* 6 (area-triangulo lado (apotema lado)))) martes 1 de marzo de 2011
22 Variables en las asignaciones del let Las expresiones del let se evalúan todas antes de asociar ningún valor con las variables. No se realiza una asignación secuencial: (define x 1) (let ((w (+ x 3)) (z (+ w 2))) ;; Error (+ w z)) martes 1 de marzo de 2011 Semántica del let Evaluar todas las expresiones de la derecha de las variables y guardar sus valores en variables auxiliares locales. Definir un ámbito local en el que se ligan las variables del let con los valores de las variables auxiliares. Evaluar el cuerpo del let en el ámbito local martes 1 de marzo de 2011
23 Es posible implementar let utilizando lambda La semántica anterior queda clara cuando comprobamos que let se puede definir en función de lambda. La expresión: (let ((<var1> <exp1>)... (<varn> <expn>)) <cuerpo>) Se puede implementar como: ((lambda (<var1>... <varn>) <cuerpo>) <exp1>... <expn>) (define x 5) (let ((x (+ 2 3)) (y (+ x 3))) (+ x y)) ((lambda (x y) (+ x y)) (+ 2 3) (+ x 3)) martes 1 de marzo de 2011 let* permite asignaciones secuenciales La forma especial let* permite una asignación secuencial de las variables y las expresiones: (let* ((x (+ 1 2)) (y (+ x 3)) (z (+ y x))) (* x y z) Cómo se puede implementar con let? martes 1 de marzo de 2011
24 let* permite asignaciones secuenciales La forma especial let* permite una asignación secuencial de las variables y las expresiones: (let* ((x (+ 1 2)) (y (+ x 3)) (z (+ y x))) (* x y z) Cómo se puede implementar con let? (let ((x (+ 1 2))) (let ((y (+ x 3))) (let ((z (+ y x))) (* x y z)))) martes 1 de marzo de 2011 let* permite asignaciones secuenciales El primer let crea un ámbito local en el que se evalúa el segundo let, que a su vez crea otro ámbito local en el que se evalúa el tercer let. Se crean tres ámbitos locales anidados, y en el último se evalúa la expresión (* x y z). (let ((x (+ 1 2))) (let ((y (+ x 3))) (let ((z (+ y x))) (* x y z)))) martes 1 de marzo de 2011
25 El ámbito definido en el let puede sobrevivir Un ejemplo avanzado del funcionamiento del let, en el que creamos una función en el ámbito del let: (define h (let ((x 3)) (lambda (y) (+ x y)))) Sucede lo siguiente: 1. Se invoca al let y se crea un entorno local en el que x vale 3 2. En ese entorno se crea una función de un parámetro que usa la variable x 3. Se devuelve la función y se asocia a h martes 1 de marzo de 2011 El ámbito definido en el let puede sobrevivir Qué pasa cuando se llama a h? Y si modificamos el valor de x en el ámbito global? (define h (let ((x 3)) (lambda (y) (+ x y)))) (h 5) (define x 10) (h 5) Funcionamiento: cuando se llama a la función, el intérprete restaura el entorno que estaba activo cuando la expresión lambda se evaluó. Y lo aumenta con las variables de los parámetros formales ligadas al valor del argumento. En este ámbito se evalúa el cuerpo de la función. martes 1 de marzo de 2011
26 El mismo efecto sin let En el ejemplo siguiente la llamada (make-sumador 3) produce exactamente el mismo efecto que el let anterior. (define (make-sumador x) (lambda (y) (+ x y))) (define h (make-sumador 3)) (define x 10) (h 5) martes 1 de marzo de 2011 El ámbito definido en el let puede sobrevivir Importante: Seguimos estando en el paradigma de programación funcional declarativa en el que no hay efectos laterales. El modelo de sustitución no explica correctamente este comportamiento. Veremos más adelante el modelo de entornos que sí lo hace. Llamamos entorno (environment) a un conjunto de valores asociados a variables. Utilizamos las palabras ámbito y entorno como sinónimos. martes 1 de marzo de 2011
27 Closure En muchos lenguajes de programación modernos existe el concepto de closure Se llama closure a una función creada en tiempo de ejecución junto con el entorno en el que ésta se ha creado Lo veremos en profundidad más adelante martes 1 de marzo de 2011 Dualidad entre datos y programas Los programas en Scheme son expresiones entre paréntesis Una expresión es una lista de símbolos Esto permite tratar a los programas como datos y viceversa La forma especial eval evalúa una expresión Un ejemplo: supongamos que queremos sumar una lista de números (define (suma-lista lista-nums) (eval (cons '+ lista-nums))) martes 1 de marzo de 2011
28 Forma especial apply Permite llamar a una función con una lista de argumentos Sintaxis: (apply <func> <lista-args>) Ejemplos: (apply + '( )) (apply '+ '( )) ; no funciona: '+ es un identificador (apply (lambda (x y) (* x y)) '(2 4)) martes 1 de marzo de 2011 Ejemplo de dualidad de datos y programa calculadora (define (calculadora) (display "Introduce parámetros entre paréntesis: ") (define params (read)) (display "Introduce cuerpo:") (define cuerpo (read)) (define func (eval (append '(lambda) (list params) (list cuerpo)))) (display "Introduce argumentos entre paréntesis: ") (define args (read)) (apply func args)) Este programa no es funcional: realiza pasos de ejecución para leer las expresiones introducidas por el usuario y para imprimir el resultado de su evaluación. martes 1 de marzo de 2011
29 Ejemplo avanzado (define (rep-loop) (display "mi-interprete> ") ; imprime un prompt (let ((expr (read))) ; lee una expresión (cond ((eq? expr 'adios) ; el usuario quiere parar? (display "saliendo del bucle read-eval-print") (newline)) (else ; en otro caso (write (eval expr)) ; evaluar e imprimir (newline) (rep-loop))))) martes 1 de marzo de 2011
30 Tema 3: Características de la programación funcional Sesión 8: El paradigma funcional (4) Referencias Capítulo 10 PLP: Functional Languages Capítulo 2.2 SICP, Abelson & Sussman
31 Hoy veremos Características de la programación funcional en LISP/Scheme Características de la programación funcional Evaluación sin efectos laterales: paradigma declarativo y modelo de sustitución Funciones como tipos de datos primitivos: forma especial lambda Ámbitos de variables: forma especial let Dualidad entre datos y programas: formas especiales eval y apply Listas como elemento fundamental de procesamiento: parejas, cons, car y cdr Recursión
32 Ejemplo de dualidad de datos y programa calculadora (define (calculadora) (display "Introduce parámetros entre paréntesis: ") (define params (read)) (display "Introduce cuerpo:") (define cuerpo (read)) (define func (eval (append '(lambda) (list params) (list cuerpo)))) (display "Introduce argumentos entre paréntesis: ") (define args (read)) (apply func args)) Este programa no es funcional: realiza pasos de ejecución para leer las expresiones introducidas por el usuario y para imprimir el resultado de su evaluación. Ejemplo de dualidad de datos y programa calculadora Es importante darse cuenta de que la expresión: (append '(lambda) (list params) (list cuerpo)) devuelve una lista que es una expresión lambda correcta, cuya evaluación va a crear un procedimiento al que se llama después. Por ejemplo: (define params '(x y)) (define cuerpo '(+ x y)) Si hiciéramos (append '(lambda) params cuerpo) qué obtendríamos?
33 Ejemplo de dualidad de datos y programa calculadora Es importante darse cuenta de que la expresión: (append '(lambda) (list params) (list cuerpo)) devuelve una lista que es una expresión lambda correcta, cuya evaluación va a crear un procedimiento al que se llama después. Por ejemplo: (define params '(x y)) (define cuerpo '(+ x y)) Si hiciéramos (append '(lambda) params cuerpo) obtendríamos una lista con 6 elementos: (append '(lambda) params cuerpo) -> (lambda x y + x y) Necesitamos obtener la lista '(lambda (x y) (+ x y)), una lista de 3 elementos Datos compuestos en Scheme En Scheme es posible crear datos compuestos. La forma de hacerlo es definiendo una construcción muy simple y usando esa construcción simple para hacer cosas más complicadas. El tipo de dato compuesto más simple es la pareja: una entidad formada por dos elementos. Se utiliza la función cons para construirla. (cons 1 2) (1. 2)
34 Diagramas caja y puntero Las parejas se representan mediante este tipo de figuras (cons 1 2) (1. 2) Funciones de acceso a una pareja Podemos obtener el elemento correspondiente a la parte izquierda con el operador car y su parte derecha con el operador cdr (define c (cons 1 2)) > (car c) 1 > (cdr c) 2 Definición declarativa: Las funciones cons, car y cdr quedan perfectamente definidas con las siguientes ecuaciones (car (cons x y)) = x (cdr (cons x y)) = y
35 Nota histórica De dónde vienen los nombres car y cdr? Realmente los nombres eran CAR y CDR (en mayúsculas) La historia se remonta al año 1959, en los orígenes del LISP y tiene que ver con el nombre que se les daba a ciertos registros de la memoria del IBM 709. Explicación completa: Las parejas pueden contener cualquier tipo de dato > (define c (cons 'hola #f)) > (car c) 'hola > (cdr c) #f
36 Las parejas pueden contener cualquier tipo de dato > (define c (cons 'hola #f)) > (car c) 'hola > (cdr c) #f (define p1 (cons (lambda (x) (+ x 3)) 5)) Cómo se podría llamar a la función de la parte izquierda de la pareja con la parte derecha como argumento? Las parejas pueden contener cualquier tipo de dato > (define c (cons 'hola #f)) > (car c) 'hola > (cdr c) #f (define p1 (cons (lambda (x) (+ x 3)) 5)) Cómo se podría llamar a la función de la parte izquierda de la pareja con la parte derecha como argumento? ((car p1) (cdr p1)) -> 8
37 Seguimos en el paradigma funcional Seguimos en el paradigma funcional Una vez creada una pareja no es posible modificar sus contenidos. Aunque Scheme tiene primitivas para modificar el contenido de las parejas. Las parejas son un tipo de dato de primer orden Una pareja es también un tipo de datos de primer orden: puede pasarse como argumento y devolverse como resultado de una función. > (define (doble-car pareja) (* 2 (car pareja))) > (doble-car (cons 4 2)) 8 > (define (doble-pareja pareja) (cons (doble-car pareja) (doble-cdr pareja))) > (doble-pareja (cons 2 3)) (4. 6)
38 Propiedad de clausura: parejas de parejas Las parejas pueden formar parte de otras parejas. Esta última propiedad se denomina clausura de la operación cons. El resultado de un cons puede usarse para construir otras parejas. Ejemplo: (define p1 (cons 1 2)) (define p2 (cons 3 4)) (define p (cons p1 p2)) Expresión equivalente: (define p (cons (cons 1 2) (cons 3 4))) Ejemplo (define p (cons (cons 1 (cons 3 4)) 2)) Qué figura representa la estructura anterior?
39 Funciones c????r > (car (cdr (car p))) 3 Es equivalente a: > (cadar p))) 3 El nombre de la función se obtiene concatenando a la letra "c", las letras "a" o "d" según hagamos un car o un cdr y terminando con la letra "r" Hay definidas 2^4 funciones de este tipo: caaaar, caaadr,, cddddr. Función pair? La función pair? nos dice si un objeto es atómico o es una pareja > (pair? 3) #f >(pair? (cons 3 4)) #t >(not (pair? (cons 2 3))) #f
40 Repaso de listas (list ) '( ) (define hola 1) (define que 2) (define tal 3) (list hola que tal) '(hola que tal) (define a '(1 2 3)) (car a) (cdr a) (length a) (length '()) (append '(1) '(2 3 4) '(5 6 7) '()) Construcción de listas con parejas Definición recursiva con parejas: Una pareja en la que el primer elemento es un dato y el segundo el resto de la lista. Un símbolo especial '() que denota la lista vacía Ejemplo: (cons 1 (cons 2 (cons 3 '())))
41 Lista vacía No es un símbolo No es una pareja Es una lista > (symbol? '()) #f > (pair? '()) #f > (length '()) 0 Funciones list? y null? Nos permite comprobar si un dato es una lista > (list? '(1 2 3)) #t > (list? '()) #t > (list? 2) #f Para comprobar si una lista está vacía utilizamos la función null? > (null? '()) #t
42 car y cdr para recorrer listas Ahora se entiende mejor por qué las funciones que permiten recorrer una lista son car y cdr como en el siguiente ejemplo: (define lista (cons 1 (cons 2 (cons 3 (cons 4 '()))))) (car lista) (cdr lista) cons para formar una nueva lista > (define l1 '( )) > (cons 'hola l1) (hola )
43 Ejercicio resuelto Define el procedimiento (insertar-list lista l2 n) que reciba dos listas y un número n. Deberá insertar en el mismo nivel, la l2 en la lista en la posición indicada por n (suponemos que n nunca será mayor que la longitud de la lista): > (define (insertar-list lista l2 n) (if (= n 0) (append l2 lista) (cons (car lista) (insertar-list (cdr lista) l2 (- n 1))))) > (insertar-list '( ) '(a b) 3) (1 2 3 a b 4) Ejercicios Dibuja el diagrama caja y puntero asociado a estas estructuras de datos: ((x) y z) (x (y z)) ((a) b (c ())) Dibuja el diagrama caja y puntero asociado a esta estructura de datos: (cons (cons 2 (cons 3 (cons 4 ()))) (cons 1 2)) Implementa la función mi-lis-ref que reciba un número n y una lista como argumento y devuelva el elemento n-ésimo de la lista (empezando a contar en 0). Implementa la función mi-list-tail que reciba un número n y una lista como argumento y devuelva la lista resultante de quitar n elementos de la lista original
44 list devuelve la primera pareja de la lista La construcción de una lista devuelve la primera pareja de la misma. Así, tras evaluar la expresión: (define lista (list 1 2 3)) La variable lista tomará el valor de la primera pareja de la lista, la pareja formada por un 1 y el resto de la lista. Es lo mismo que cuando hacemos: (define lista (cons 1 (cons 2 (cons 3 '())))) cons para formar una nueva lista > (define l1 '( )) > (cons 'hola l1) (hola ) martes 8 de marzo de 2011 Scheme muestra las estructuras compuestas como listas Cuando Scheme imprime una estructura compuesta por parejas, va recorriendo la estructura intentando escribirla como una lista. Por ejemplo: > (cons 1 (cons 2 (cons 3 '()))) (1 2 3) >(cons 1 (cons 2 3)) (1 2. 3) Esta última estructura no es una lista martes 8 de marzo de 2011
45 Listas con elementos compuestos Las listas pueden contener cualquier tipo de elementos, incluyendo otras parejas. La siguiente estructura se denomina lista de asociación: una lista cuyos elementos son parejas: (list (cons 'a 1) (cons 'b 2) (cons 'c 3)) -> ((a.1)(b.2)(c.2)) Cuál sería el diagrama de la lista anterior? La expresión equivalente utilizando parejas: martes 8 de marzo de 2011 Listas con elementos compuestos Las listas pueden contener cualquier tipo de elementos, incluyendo otras parejas. La siguiente estructura se denomina lista de asociación: una lista cuyos elementos son parejas: (list (cons 'a 1) (cons 'b 2) (cons 'c 3)) -> ((a.1)(b.2)(c.2)) Cuál sería el diagrama de la lista anterior? La expresión equivalente utilizando parejas: (cons (cons 'a 1) (cons (cons 'b 2) (cons (cons 'c 3) '()))) martes 8 de marzo de 2011
46 Listas de listas Las listas, al igual que las parejas, pueden contener cualquier tipo de dato, incluso otras listas: (define l1 (list 1 2 3)) (define l2 (list 1 l1 2 3)) La lista anterior también la podemos definir con quote: (define l2 '(1 (1 2 3) 2 3)) Cuál sería su representación con parejas? Y su diagrama caja y puntero? martes 8 de marzo de 2011 Implementación de funciones sobre listas Implementa la función mi-append que reciba dos listas como argumento y devuelva una nueva lista compuesta por la concatenación de las dos listas recibidas. martes 8 de marzo de 2011
47 Implementación de funciones sobre listas Implementa la función mi-append que reciba dos listas como argumento y devuelva una nueva lista compuesta por la concatenación de las dos listas recibidas. (define (mi-append l1 l2) (if (null? l1) l2 (cons (car l1) (mi-append (cdr l1) l2)))) martes 8 de marzo de 2011 Implementación de funciones sobre listas Implementa la función mi-length que reciba una lista como argumento y devuelva el número de elementos que contiene (en el primer nivel). > (mi-length '(1 2 3 (4 5 6))) 4 martes 8 de marzo de 2011
48 Implementación de funciones sobre listas Implementa la función mi-length que reciba una lista como argumento y devuelva el número de elementos que contiene (en el primer nivel). > (mi-length '(1 2 3 (4 5 6))) 4 (define (mi-length items) (if (null? items) 0 (+ 1 (mi-length (cdr items))))) martes 8 de marzo de 2011 Los datos compuestos pueden ser funciones Definimos la función mi-cons como: (define (mi-cons x y) (lambda (m) (cond ((equal? m 'car) x) ((equal? m 'cdr) y) (else (error "mensaje no definido: " m)) ))) La función anterior es equivalente a la función cons de Scheme. Se devuelve un procedimiento que admite un argumento m (mensaje). Cuando al procedimiento se le pasa el mensaje 'car devolverá el argumento x original de mi-cons y cuando se le pasa el mensaje 'cdr devolverá el argumento y martes 8 de marzo de 2011
49 Los datos compuestos pueden ser funciones Definimos la función mi-cons como: (define (mi-cons x y) (lambda (m) (cond ((equal? m 'car) x) ((equal? m 'cdr) y) (else (error "mensaje no definido: " m)) ))) Cómo la utilizamos? Pensad en un ejemplo martes 8 de marzo de 2011 Los datos compuestos pueden ser funciones Definimos la función mi-cons como: (define (mi-cons x y) (lambda (m) (cond ((equal? m 'car) x) ((equal? m 'cdr) y) (else (error "mensaje no definido: " m)) ))) Cómo la utilizamos? Pensad en un ejemplo > (define p (mi-cons 'hola #f)) > (p 'car) hola > (p 'cdr) #f martes 8 de marzo de 2011
50 Los datos compuestos pueden ser funciones Definimos la función mi-cons como: (define (mi-cons x y) Funciones (lambda (m) (cond ((equal? m 'car) x) ((equal? m 'cdr) y) (else (error "mensaje no definido: " m)) ))) Funciones que encapsulan la llamada a la función: Ahora no hay ninguna diferencia entre el comportamiento de las funciones originales y el de las nuestras martes 8 de marzo de 2011 Los datos compuestos pueden ser funciones Definimos la función mi-cons como: (define (mi-cons x y) Funciones (lambda (m) (cond ((equal? m 'car) x) ((equal? m 'cdr) y) (else (error "mensaje no definido: " m)) ))) Funciones que encapsulan la llamada a la función: (define (mi-car pareja) (pareja 'car)) (define (mi-cdr pareja) (pareja 'cdr)) Ahora no hay ninguna diferencia entre el comportamiento de las funciones originales y el de las nuestras martes 8 de marzo de 2011
51 Los datos compuestos pueden ser funciones Definimos la función mi-cons como: (define (mi-cons x y) Funciones (lambda (m) (cond ((equal? m 'car) x) ((equal? m 'cdr) y) (else (error "mensaje no definido: " m)) ))) Funciones que encapsulan la llamada a la función: (define (mi-car pareja) (pareja 'car)) (define (mi-cdr pareja) (pareja 'cdr)) (define p (mi-cons (mi-cons 1 (mi-cons 3 4)) 2)) > (mi-car (mi-cdr (mi-car p))) 3 Ahora no hay ninguna diferencia entre el comportamiento de las funciones originales y el de las nuestras martes 8 de marzo de 2011
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
Más detallesTema 3: Características de la programación funcional. Sesión 6: El paradigma funcional (2)
Tema 3: Características de la programación funcional Sesión 6: El paradigma funcional (2) 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
Más detallesTema 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
Más detallesTema 3: Programación funcional
Tema 3: Programación funcional Contenidos 5. Funciones como tipos de datos de primera clase 5.1. Forma especial lambda 5.2. Las funciones son objetos de primera clase 5.3. Funciones de orden superior 6.
Más detallesAplicació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:
Más detallesCAPÍTULO IV: 4.1 Introducción a la. Programación Funcional
CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones
Más detallesGUÍ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
Más detallesTema 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
Más detallesTema 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
Más detallesLenguajes 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
Más detallesTema 9: Asignación, estado local y modelo de entornos
Tema 9: Asignación, estado local y modelo de entornos Índice 1 Programación imperativa... 2 2 Formas especiales set!...3 3 La forma especial begin... 3 4 Entornos... 4 5 El modelo de computación de Scheme
Más detallesTema 2: Características de la programación funcional
Tema 2: Características de la programación funcional Índice 1 Aproximación teórica a la programación funcional...2 1.1 Programación declarativa... 2 1.2 El Lisp y el paradigma funcional...4 1.3 El cálculo
Más detallesTema 3: Programación funcional
Tema 3: Programación funcional Contenidos 1. El paradigma de Programación Funcional 1.1 Definición y orígenes del paradigma funcional 1.2. Programación declarativa 1.3. Valores y referencias 1.4. Modelo
Más detallesTema 3: Programación funcional (1/3)
Tema 3: Programación funcional (1/3) Hoy: 1. El paradigma de programación funcional Historia de la PF Características fundamentales El renacimiento de la PF 2. Modelos de evaluación de expresiones en PF
Más detallesTema 10: Tipos de datos mutables
Índice 1 Introducción... 2 2 Primitivas set-car! y set-cdr!...2 2.1 Como implementar cons, set-car! y set-cdr!...3 3 Mutación... 3 4 Igualdad...6 5 TADs con datos mutables... 9 5.1 Lista ordenada... 9
Más detallesTema 9: Asignación, estado local y modelo de entornos
Tema 9: Asignación, estado local y modelo de entornos Índice 1 Programación imperativa... 2 2 Formas especiales set!...3 3 Entornos... 3 4 Estado local...8 4.1 Ejemplo 1: contador global... 8 4.2 Ejemplo
Más detalles4.3 Recursión en Scheme. Recursión simple y asignación
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
Más detalles4.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
Más detallesTema 7: Programación imperativa. Sesión 23: Programación imperativa (4)
Tema 7: Programación imperativa Sesión 23: Programación imperativa (4) Indice Historia de la programación imperativa Características principales Datos mutables en Scheme y en Scala Estructuras de control
Más detallesProgramació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
Más detallesTema 3. Listas Recursión sobre datos
Tema 3 Listas Recursión sobre datos José A. Alonso M. José Hidalgo Álvaro Romero Dpto. Ciencias de la Computación e Inteligencia Artificial UNIVERSIDAD DE SEVILLA Informática ListasRecursión sobre datos
Más detallesTema 7: Macros. Índice. 1 Introducción Conceptos previos Macros en Scheme Más ejemplos de macros Referencias...
Índice 1 Introducción... 2 2 Conceptos previos...2 3 Macros en Scheme... 7 4 Más ejemplos de macros...10 5 Referencias...13 1. Introducción El primer párrafo del Revised5 Report on the Algorithmic Language
Más detallesProgramació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))) (+
Más detalles4.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
Más detalles4.7 Operaciones sobre Objetos en Scheme. Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores
4.7 Operaciones sobre Objetos en Scheme Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores a) Equivalencias (eq? obj 1 obj 2 ) retorno: #t si son idénticos (eqv? obj 1
Más detallesProgramació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
Más detallesUNIDAD 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
Más detallesTema 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
Más detallesTema 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
Más detallesPROGRAMACIÓN DECLARATIVA
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 CUARTO CURSO PRIMER CUATRIMESTRE Tema 5.-
Más detallesTema 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
Más detalles4.5 Ligado de Variables en Scheme
4.5 Ligado de Variables en Scheme Referencia a variables, lambda, formas let y asignación a) Referencia a una Variable variable retorno: valor de la variable Cualquier identificador no citada en una expresión
Más detallesProgramació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:
Más detallesTema 5: Macros. Sesión 14: Macros
Tema 5: Macros Sesión 14: Macros Hoy veremos... Conceptos generales Quasiquotation Macros en Scheme Ejemplos de macros Referencias Capítulo 3.7 Programming Language Pragmatics: Macro Expansion Definición
Más detallesFunciones como parámetros, funciones como resultados. Introducción a la Computación Patricia Borensztejn Clase 26
Funciones como parámetros, funciones como resultados Introducción a la Computación Patricia Borensztejn Clase 26 Funciones de orden superior Se llama así a la técnica que permite pasar funciones como parámetros
Más detallesClase 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
Más detallesTipos 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
Más detallesAbstracción de procedimientos
Abstracción de procedimientos 1.- Consideremos ABN (árboles binarios numéricos) sin nodos repetidos. Denimos los siguientes conceptos: Se pide: Dados dos ABN, A y B, decimos que B es SUBARBOL PRINCIPAL
Más detallesIntérpretes. Intérpretes. Intérpretes. Intérpretes. Lenguajes de definición y definido. Valores expresados y denotados
Toman la sintaxis abstracta (parsed) de un programa Producen el valor de la expresión La especificación del interprete corresponde a la semántica del lenguaje de programación Intérprete básico: literales
Más detallesCLIPS Definición de funciones
CLIPS Definición de funciones Por función consideramos tanto las funciones predefinidas en CLIPS como las definidas por el usuario en este lenguaje, o las definidas en un lenguaje externo (C, FORTRAN o
Más detallesProcedimientos y Recursividad
Capítulo 2 Procedimientos y Recursividad 2.1 Introducción Es muy fácil definir un procedimiento en Scheme. El lenguaje proporciona una forma elegante de hacerlo, basada en el cálculo lambda de Alonzo Church
Más detallesProcedimientos Definidos Localmente
Capítulo 5 Procedimientos Definidos Localmente 5.1 Distinguiendo entre definiciones globales ylocales Todas las primitivas (o procedimientos) disponibles en Scheme (p.ej., car, cons, cdr, etc.) se definen
Más detallesInducció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:
Más detallesUnidad 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
Más detallesLenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados
Lenguajes de programación Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Teórica - clase 3 Introducción a la programación imperativa Las computadoras
Más detallesTema 6: Programación funcional en Scala. Sesión 18: Programación funcional en Scala
Tema 6: Programación funcional en Scala Sesión 18: Programación funcional en Scala Referencias Programming in Scala. Martin Odersky, Lex Spoon, Bil Venners. Ed. Artima. Programming Scala. Dean Wampler,
Más detallesTema 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
Más detallesManual 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............................
Más detallesPráctica 5.- Recursividad
Benemérita Universidad Autónoma de Puebla Facultad de Ciencias de la Computación Programación Avanzada en Java Prim. 2009 Práctica 5.- Recursividad Datos de la práctica Fecha 6 de marzo de 2009 Conceptos
Más detallesAbstracción Sintáctica y Abstracción de Datos
Abstracción Sintáctica y Abstracción de Datos Abstracción Sintáctica y de Datos (2) Abstracción de datos De las representaciones procedurales a las representaciones estructuradas (Data Structure Representations
Más detallesAlgoritmos 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
Más detallesEl lenguaje LISP. LISP is an easy language to learn (Henry et.al., 1984) Introducción
El lenguaje LISP LISP is an easy language to learn (Henry et.al., 1984) 1 Introducción Origen: 1958 John McCarthy, pionero en IA, empezó a trabajar con la primera implementación de Lisp en 1958.»McCarthy,
Más detallesEl lenguaje LISP. LISP is an easy language to learn
El lenguaje LISP LISP is an easy language to learn (Henry et.al., 1984) 1 Origen: 1958 Introducción John McCarthy, pionero en IA, empezó a trabajar con la primera implementación de Lisp en 1958.» McCarthy,
Más detallesLaboratorio Análisis Lógico Práctica 1
Laboratorio Análisis Lógico Práctica 1 Pedro Arturo Góngora Luna 1 1 Introducción 1.1 Haskell y la programación funcional En la década de los 30 s, Alonzo Church desarrolló un lenguaje formal llamado cálculo
Más detallesEntendiendo expresiones lambda en C# con Mono
Entendiendo expresiones lambda en C# con Mono Martín O. Márquez Introducción La programación imperativa es uno de los paradigmas de computación más ampliamente utilizados por la mayoría
Más detallesPara entender la recursividad primero tenemos que entender la recursividad
Para entender la recursividad primero tenemos que entender la recursividad Funcional Clase 1 Matias Reparaz, Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 20 de Septiembre
Más detallesFunciones Segunda parte
Expresiones condicionales Matemática Discreta usando el computador 2011 Funciones Segunda parte Una expresión condicional utiliza una expresión de tipo Bool para decidir entre dos opciones Estructura if...then...
Más detallesResumen 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)
Más detallesPROGRAMA DE CURSO. Horas de Trabajo Personal ,5 5,5
Código Nombre CC4101 Lenguajes de Programación Nombre en Inglés Programming Languages SCT PROGRAMA DE CURSO Unidades Docentes Horas de Cátedra Horas Docencia Auxiliar Horas de Trabajo Personal 6 10 3 1,5
Más detallesTema 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
Más detalles2º 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
Más detallesLenguajes funcionales: λ-cálculo
Lenguajes funcionales: λ-cálculo λ-cálculo (Church 1933) Cálculo para el estudio formal del comportamiento de las funciones Sintaxis: λ expresiones Reglas de reducción de λ expresiones Método matemático
Más detallesEstructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa
Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,
Más detallesUn calculadora avanzada... y algo más!
INFORMÁTICA, GRUPO D Un calculadora avanzada... y algo más! Vamos a familiarizarnos con el entorno interactivo de Python. Vamos a construir expresiones aritméticas y a guardar los resultados en variables
Más detallesTema 1 Programación Funcional
Tema 1 Programación Funcional Curso de Python Avanzado Juan Pedro Boĺıvar Puente Instituto de Astrofísica de Andalucía Mayo de 2011 Juan Pedro Boĺıvar Puente (Instituto de Astrofísica Tema de Andalucía)
Más detallesPARADIGMAS DE PROGRAMACIÓN CALCULO LAMBDA CALCULO LAMBDA
PARADIGMAS DE PROGRAMACIÓN 2006 CALCULO LAMBDA CALCULO LAMBDA El cálculo lambda fue desarrollado por Alonso Church en la década del 30 con el objeto de dar una teoría general de las funciones. El cálculo
Más detallesParadigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018
Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2018 FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2) = 3 Enumeración f(x)
Más detallesProgramación Interactiva
Capítulo 6 Programación Interactiva 6.1 Cadenas Una cadena es una secuencia de caracteres encerrados en comillas dobles. Scheme proporciona varios procedimientos para manipular cadenas: Procedimiento string?
Más detallesTP 3: intérprete de C en LISP (alias máquina virtual de C en LISP )
TP 3: intérprete de C en LISP (alias máquina virtual de C en LISP Introducción Se deberá programar un intérprete de C en LISP. El código que ingresará al intérprete tendrá ciertas restricciones: Se utilizará
Más detallesModelos de Desarrollo de Programas Y Programación Concurrente Clase N 3
PROGRAMACION FUNCIONAL - Un lenguaje de programación funcional tiene gran flexibilidad, es conciso en su notación y su semántica es sencilla. El inconveniente principal de estos lenguajes ha sido la ineficiencia
Más detallesParadigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017
Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2017 Paradigma Funcional FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2)
Más detallesMáquinas de estado finito y expresiones regulares
Capítulo 3 Máquinas de estado finito y expresiones regulares En este tema definiremos y estudiaremos máquinas de estado finito, llamadas también máquinas de estado finito secuenciales o autómatas finitos.
Más detalles! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes
Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar
Más detallesTema 8: Tipos de datos. Sesión 24: Tipos de datos (1)
Tema 8: Tipos de datos Sesión 24: Tipos de datos (1) Referencias Programming Languages Pragmatics: Capítulo 7, apartados 7.1 (Type Systems) y 7.2 (Type Checking) Programming in Scala: Capítulo 5 (Basic
Más detallesAbstracció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
Más detallesMétodos CON valor de retorno
Métodos Estáticos C# Fundamentos de Programación. Objetivos del tema: Qué es un método? Qué métodos conoces? Métodos que NO devuelven valor. Métodos que SI devuelven un valor. Paso de parámetros. Variables
Más detallesPHP: Lenguaje de programación
Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054
Más detallesApunte Laboratorio ALPI - El lenguaje de programación Pascal
Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................
Más detallesUnidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.
Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está
Más detallesDeclaración. Introducción. Definición o implementación. Llamada. Un programa en C consta de una o más funciones.
Dpto. de ATC, Universidad de Sevilla - Página 1 de 5 1 2 Introducción Declaración Un programa en C consta de una o más funciones. La función main es la primera función que se ejecuta y que llama a las
Más detallesSe debe disponer sobre la mesa un documento de identificación con fotografía.
Examen escrito de Programación 1. Miércoles 31 de enero de 2018 Se debe disponer sobre la mesa un documento de identificación con fotografía. Se debe comenzar a resolver cada uno de los problemas del examen
Más detallesClase 2 de prácticas: Funciones como datos primitivos
Clase 2 de prácticas: Funciones como datos primitivos Índice 1 Ejercicio 1... 2 2 Ejercicio 2... 2 3 Ejercicio 3... 2 4 Ejercicio 4... 3 5 Ejercicio 5 (ampliación)...3 6 Ejercicio 6 (ampliación)...4 7
Más detallesTema 1: Introducción a la programación funcional
Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 21 3 / 21 en Haskell En Haskell, una
Más detallesn! = 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
Más detallesTema 3. Patrones y Definiciones de Funciones
Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones
Más detallesTipos en Haskell. Cecilia Manzino
Tipos Tipo: conjunto de valores asociados a operaciones. Ejemplos: enteros, caracteres, booleanos, funciones de enteros a enteros. Sirven para: detectar errores antes de la evaluación especificar programas
Más detallesFunciones recursivas
Introducción a la Computación Funciones recursivas Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 08/04/2014 E. Mocskos (UBA CONICET) Clase 9: Funciones Recursivas
Más detallesIntroducción a c++ Introducción a la programación EIS Informática III
Introducción a c++ Un lenguaje de programación es un lenguaje formal diseñado para realizar procesos que pueden ser llevados a cabo por máquinas como las computadoras. Pueden usarse para crear programas
Más detallesParadigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa
Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado
Más detallesTema 7: Programación imperativa
Tema 7: Programación imperativa Sesión 20: Programación imperativa Indice Historia de la programación imperativa Características principales Datos mutables Estructuras de control Modelo de entornos Orígenes
Más detallesDocente: 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:
Más detallesCONCEPTO Y DEFINICIÓN DE CLASE EN JAVA. OBJETOS DEL MUNDO REAL Y ABSTRACTOS. EJEMPLOS. EJERCICIO (CU00644B)
APRENDERAPROGRAMAR.COM CONCEPTO Y DEFINICIÓN DE CLASE EN JAVA. OBJETOS DEL MUNDO REAL Y ABSTRACTOS. EJEMPLOS. EJERCICIO (CU00644B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero
Más detalles$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,
Más detalles