Professional Documents
Culture Documents
Programacion funcional
Roberto Bonvallet
Departamento de Informatica
Universidad Tecnica Federico Santa Mara
Concepto de funcion
En el paradigma imperativo:
I Una funcion es una secuencia de instrucciones
I El valor de retorno se obtiene a traves de una serie de
manipulaciones de estado
I Existencia de estado implica posibles efectos laterales
I Consecuencia de la arquitectura de von Neumann
Concepto de funcion
En matematicas:
I Una funcion es un mapeo de los elementos de un conjunto a
los de otro: f : A B
I Generalmente descrita por una expresion o una tabla de
valores
I Evaluacion controlada por recursion y expresiones
condicionales
I Libre de efectos laterales
Influencia del paradigma imperativo en la programacion
Funciones simples
I Ejemplo: cubo(x) x x x
I x representa cualquier valor del dominio, pero esta fijo en un
elemento especfico durante la evaluacion
I Durante la evaluacion, cada aparicion de un parametro
esta ligada a un valor y es considerada constante
I Notacion lambda para funciones anonimas:
(x) x x x
target (f
g , source)
target (x) f g (x) , source
h i
target f g (i) i source
Introduccion a Scheme
Caractersticas:
I dialecto de LISP
I sintaxis y semantica simples
I nombres tienen ambito estatico
I no es puramente funcional
Funcionamiento del interprete de Scheme
2. llamadas a funcion:
(max 43 23 15 58 2 1 )
3. formas sintacticas:
( i f (< x 0 ) x ( x ) )
Constantes literales
I Valores literales pueden ser:
I numeros enteros, reales, racionales y complejos:
123456789
3.14159
22/7
+27.03.0 i
5 . 0 @3 . 0
I strings:
Hola mundo
I caracteres:
#\a
#\s p a c e
I booleanos:
#t
#f
Listas
I Notacion de listas:
(a b c d)
Figura: Representacion de (1 2 3 4 5)
Representacion interna de las listas
( car (1 2 3 4 5))
> 1
( cdr (1 2 3 4 5))
> ( 2 3 4 5)
( cons a ( b c d ))
> ( a b c d)
Listas impropias
Figura: Representacion de (1 2 3 4 . 5)
Listas impropias
( d e f i n e incometax
( 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 ) )
)))
Evaluacion de valores de verdad
(< 1 2 3 4 5 )
> #t
( null ? ())
> #t
( null ? (1 2 3))
> #f
( p a i r ? (8 . 2))
> #t
( eqv ? 3 2 )
> #f
( number ? 1 5 )
> #t
( l i s t ? Veamos s i s o y una l i s t a . . . )
> #f
Recursion simple
I En Scheme, la iteracion se hace usando recursion.
I La recursion es mas general que construcciones tipo for o
while, y elimina la necesidad de usar variables de control.
I Una funcion recursiva debe tener:
1. un caso base, y
2. un paso de recursion.
I Ejemplo:
( d e f i n e length
( lambda ( l s )
( i f ( null ? ls )
0
(+ 1 ( l e n g t h ( c d r l s ) ) ) ) ) )
( length ( ) )
> 0
( length ( a b c ) )
> 3