Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Funcional Diapos
Funcional Diapos
Roberto Bonvallet
Departamento de Inform atica Universidad T ecnica Federico Santa Mar a
Concepto de funci on
En el paradigma imperativo:
Una funci on es una secuencia de instrucciones El valor de retorno se obtiene a trav es de una serie de manipulaciones de estado Existencia de estado implica posibles efectos laterales Consecuencia de la arquitectura de von Neumann
Concepto de funci on
En matem aticas:
Una funci on es un mapeo de los elementos de un conjunto a los de otro: f : A B Generalmente descrita por una expresi on o una tabla de valores Evaluaci on controlada por recursi on y expresiones condicionales Libre de efectos laterales
Lenguajes imperativos est an dise nados para explotar la arquitectura del computador Apego a la arquitectura es una restricci on innecesaria al proceso de desarrollo de software Lenguajes dise nados seg un otros paradigmas son impopulares debido a penalizaciones de rendimiento M aquina de Turing: modelo matem atico para estudiar capacidades y limitaciones del computador
Objetivo: emular las funciones matem aticas lo m as posible. No se usa variables ni asignaciones. Repetici on a trav es de recursi on. Transparencia referencial. Funciones son objetos de primera clase. Un programa consiste de deniciones de funciones y aplicaciones de ellas.
Funciones
Funciones simples
Ejemplo: cubo(x ) x x x x representa cualquier valor del dominio, pero est a jo en un elemento espec co durante la evaluaci on Durante la evaluaci on, cada aparici on de un par ametro est a ligada a un valor y es considerada constante Notaci on lambda para funciones an onimas: (x ) x x x Evaluaci on de una funci on an onima: (x ) x x x (2) = 8
Funciones
Introducci on a Scheme
Caracter sticas:
dialecto de LISP sintaxis y sem antica simples nombres tienen ambito est atico no es puramente funcional
Entorno interactivo implementa un ciclo lectura-evaluaci on-escritura Se puede cargar las expresiones desde un archivo para facilitar el desarrollo. Las llamadas a funciones se eval uan as :
1. se eval ua los par ametros; 2. se aplica la funci on sobre los par ametros.
Scheme utiliza la misma sintaxis para: 1. listas: (1 2 3 4 5) 2. llamadas a funci on: ( max 43 23 15 58 2 1 ) 3. formas sint acticas: ( i f ( < x 0 ) x ( x ) )
Constantes literales
Valores literales pueden ser:
n umeros enteros, reales, racionales y complejos: 123456789 3.14159 22/7 +27.0 3.0 i 5 . 0 @3 . 0 strings: Hola mundo caracteres: #\a #\ s p a c e booleanos: #t #f
Listas
Notaci on de listas: (a b c d) Los elementos pueden ser de cualquier tipo: ( 1 . 0 Hola mundo 3 ) Las listas se pueden anidar: (a (b c ) (d e ( f ) g )) Las listas se tratan como objetos inmutables
implementadas como listas enlazadas los nodos se llaman pares o celdas cons el nal de una lista se marca con la lista vac a
Figura: Representaci on de (1 2 3 4 5)
implementadas como listas enlazadas los nodos se llaman pares o celdas cons el nal de una lista se marca con la lista vac a
Celdas cons
Las celdas cons son el tipo de datos estructurado fundamental de Scheme. El campo izquierdo de una celda se denomina el car, y el campo derecho, el cdr. En una lista enlazada propia, las celdas tienen:
un valor en el car; una referencia a una lista en el cdr.
Celdas cons
Las funciones car y cdr obtienen el car y el cdr de una celda. La funci on cons permite crear una celda cons deniendo su car y su cdr, y por lo tanto se puede usar para crear listas enlazadas. ( car (1 > 1 ( cdr (1 > (2 3 ( cons a > (a b 2 3 4 5)) 2 3 4 5)) 4 5) ( b c d )) c d)
Listas impropias
Una lista es impropia cuando el cdr de su u ltima celda no es la lista vac a. Las listas impropias se representan usando la notaci on de par con punto.
Figura: Representaci on de (1 2 3 4 . 5)
Listas impropias
Una lista es impropia cuando el cdr de su u ltima celda no es la lista vac a. Las listas impropias se representan usando la notaci on de par con punto.
Listas impropias
Una lista es impropia cuando el cdr de su u ltima celda no es la lista vac a. Las listas impropias se representan usando la notaci on de par con punto.
Llamadas a funciones
Llamadas a funciones utilizan la misma notaci on que las listas: ( funcion arg1 arg2 . . . argN ) Para evitar que una lista sea evaluada como funci on, se utiliza el operador de citado: (a b c d) error : a no e s una f u n c i o n ( quote ( a b c d )) > (a b c d) ( a b c d) > (a b c d)
Funciones an onimas
La forma sint actica lambda permite denir funciones an onimas. Sintaxis: ( lambda ( a r g 1 a r g 2 . . . ) e x p r 1 e x p r 2 . . . ) Ejemplo: ( lambda ( x y ) (+ ( x x ) ( y y ) ) ) ># <p r o c e d u r e > ( ( lambda ( x y ) (+ ( x x ) ( y y ) ) ) 3 4 ) > 25
Guarda en args la lista de todos los argumentos: ( lambda a r g s e x p r 1 e x p r 2 . . . ) Guarda en rest todos los argumentos adicionales: ( lambda ( a r g 1 . . . a r g N . r e s t ) e x p r 1 e x p r 2 . . . )
Ligados locales
La forma sint actica let establece ligados de nombres locales. Nombres ligados con let son visibles s olo en el cuerpo del let . Sintaxis: ( let (( var1 val1) ( var2 val2) . . . ) expr1 expr2 . . . ) Ejemplo: ( l e t ( ( a 17) ( b 31)) (+ ( 1/2 a b ) ( 1/3 a b ) ) ) > 439.166666666667 ( ( lambda ( x y ) ( l e t ( ( x squared ( x x ) ) ( y squared ( y y ) ) ) ( s q r t (+ x squared y squared ) ) ) ) 5 12) > 13.0
La forma sint actica dene liga un nombre a una expresi on. Sintaxis: ( d e f i n e nombre e x p r ) Ejemplo: ( d e f i n e n 25) ( d e f i n e s q u a r e ( lambda ( x ) ( x x ) ) ) ( square n) > 625
La forma sint actica cond permite evaluar una expresi on usando distintos casos. Sintaxis: ( cond c l a u s u l a 1 c l a u s u l a 2 . . . ) Cada cl ausula tiene alguna de estas formas:
1. (condicion) 2. (condicion expr 1 expr2 ...) 3. (condicion => expr)
( d e f i n e income tax ( lambda ( income ) ( cond ((<= income 1 0 0 0 0 ) ( income . 0 5 ) ) ((<= income 2 0 0 0 0 ) (+ ( ( income 1 0 0 0 0 ) . 0 8 ) 5 0 0 . 0 0 ) ) ((<= income 3 0 0 0 0 ) (+ ( ( income 2 0 0 0 0 ) . 1 3 ) 1 3 0 0 . 0 0 ) ) ( else (+ ( ( income 3 0 0 0 0 ) . 2 1 ) 2 6 0 0 . 0 0 ) ) )))
Todos los objetos son considerados verdaderos, excepto #f. Existen las formas sint acticas and, or y not. and y or hacen cortocircuito. En general, los predicados l ogicos tienen nombres terminados en ?.
Recursi on simple
En Scheme, la iteraci on se hace usando recursi on. La recursi on es m as general que construcciones tipo for o while, y elimina la necesidad de usar variables de control. Una funci on recursiva debe tener:
1. un caso base, y 2. un paso de recursi on.