Está en la página 1de 51

Programacin Funcional

Lisp-DrScheme
Primera Parte

Programacin Funcional
!
"
$

#
!
#

# %

# &%

'

%
#

(
!

Scheme
)&
*

# %

( #

#
! +%
,
.% )

-%
$

)
$

%)

% $

Scheme
)&
%

#
#

'

&
# % ( #

0
)&
!
#%

#
*&

2 !$
)&

!$
/

)&

(
3

!
(

Dnde bajar Scheme?


(PLTScheme DrScheme):
http://plt-scheme.org/

Ejemplo:
> (+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
57
> (define tamao 2)
Tamao
> tamao
2
> (+ 3 tamao)
5
> (* 2 tamao)
4

Definicin de Variables
(define Pi 3.14159)
Pi
(define radio 10)
Radio
(define circunferencia (* 2 Pi radio))
Circunferencia
> circunferencia
62.8318

Funciones en Lisp
Ejemplo:
*
5*
7

'
+*4''
+
+
6+

Ejemplo:
*

+
*4/

5*
86 9::;:

+
+
7+

Sintaxis de las funciones:


*

*<
*

! 5<
+
+

5+

Ejemplo:
*

5*
8;

*
*> *
=

'%+
'
+*
6 ;+

%+
+
+

Ejemplo: Composicin de Funciones

5*
*
5 * 9+
96

*8 +
=

*> 8+*1

8+
+
+

El modelo de sustitucin para


evaluar funciones
* 8 9+
*
=
*> 9 8+*1 9 8+
+
*> *
*> 9 8+
+*
*1 9 8+
+
+
*> *4*> 9 8+*> 9 8+
+*4*1 9 8+*1 9 8+
+
+
*> *4: :+*47 7+
+
*> ;: 8:+
96

Funciones Booleanas
*

* 19? +
*@ 9+
+

5 * 19? 9+
A
5 * 19? B+
A

Funciones Booleanas
*

*
1
191:? +
*< 9 +*< :+
+
+

*
*

1
1

191:1 1 ! 18C? +
191:? +*5@ 8C+
+
+

Sintaxis del if
* <

5<
<

5
5+

Ejemplo:
*

*6'
+
* *5@ '6+*4''
+
* *
*< '6+*5 '16+
+*> '8+
*D'6+
+
+
+

5 * 6 7+
8:
5 * 6 C+
8

Expresiones condicionales y predicados


*

*< 85 < 85+


*< 65 < 65+
*< 5 < 5+
*
< >85+
+

Ejemplo:
*

* ;'
+
*
**5@ '6+*> *4''
+8+
+
**@ 'C+6+
*
*4'''
+
+
+
+

5 * ;;+
8C

Expresiones condicionales y predicados


*
E
< 85 < 85F
E
< 5 < 5F
E
+
>8F

Ejemplo:
*

*
E
*<@
8CCC+C C7CF
E
*<@
9CCC+C C79F
E C C9CF
+
+

Sentencias read y write - Evaluando un documento


*

*
1
*D*> '% +;+
+

*
? +
*5@ BC+
+

*
* G +
*G
H
* G +
*
1

'% +

+
H
+
*

+*

+*

+
+
+

*
* *
*G

@5*
H
KC
LC
BC
H
-I H

+
?*
+
+*G
H
-I H
+
H
IJ/ I3 H
+
+
+
+
H

Definiciones Internas:
*

*
*

*
1
'% +
*D*> '% +;+
+
*
*
? +
*5@ BC+
+
*
*
+
* G +
*G
H
H
+
* G +
*
1
*
+*
+*
+
+
+
*
*
+
* *
?*
+
+*G
H
-I H
+
*G
H
IJ/ I3 H
+
+
+
*
+
+

@5*
+
H
KC
7C
9C
H
IJ/ I3
@5*
1

M
+
!

D
D
! 0

Procesamiento simblico
Un smbolo es una secuencia de caracteres
precedida por un signo de comillas simple:
Ejemplos:
N
N

N
O;

N
N%P

N
P ?

N &

Procesamiento simblico
Scheme tiene una sola operacin bsica de
manipulacin de smbolos: symbol=?,
Es una operacin de comparacin, recibe dos
smbolos y produce true si y slo si los dos
smbolos son idnticos:
Ejemplos;
(symbol=? 'Hola 'Hola) = true
(symbol=? 'Hola 'Hello) = false
(symbol=? 'Hola x) = true si x almacena 'Hola
(symbol=? 'Hola x) = false si x almacena 'Hello

Procesamiento simblico
Los smbolos fueron introducidos a la computacin por los
investigadores en inteligencia artificial que queran disear
programas que pudieran tener conversaciones con la gente.
Por ejemplo la funcin respuesta, que responde con alguna
observacin a los diferentes saludos:
(define (respuesta s)
(cond
[(symbol=? s 'buenos-dias) 'Hola]
[(symbol=? s 'como-esta?) 'bien]
[(symbol=? s 'buenas-tardes) 'buenas]
[(symbol=? s 'buenas-noches) 'estoy-cansado]))

Recursin y Recursin Lineal


Ejemplo:

Q
*

*
+
*@ C+*@ 8+
+

* *
8
*4 *

*1

8+
+
+
+
+

*
*

8 +
88 +
+

1
+

*
* *5
*

*4

+*> 8+ +
+
+

Modelo de Sustitucin
*
*
*
*
*
*

1
1
1
1
1

8 7+
8 8 7+
8 6 7+
6 ;7+
: 7 7+
67 9 7+

Ejemplo 2:

Q
*
*

* ! +
**@ C+C+
**@ 8+8+
*
*> * ! *1

8+
+* ! *1

6+
+
+
+
+
+

* !8 +
* !1 8 C 8 C +
+

* !1 8
* *5@ +
* !1

*>

+*> 8+ +
+
+

Q
*

* !8 +
* !1
8C +
+

* !1
! +
* *@ C+
!
* !1
*> !+ *1

8+
+
+
+

Funciones como Parmetro


Ejemplo 1:
(define (serie1 a n)
(if (> a n)
0
(+ a (serie1 (+ a 1) n))))

Ejemplo 2:
define (serie2 a n)
(if (> a n)
0
(+ (* a a) (serie2 (+ a 1) n))))

Ejemplo 3:
(define (serie3 a n)
(if (> a n)
0
(+ (/ 1 (+ (* a a) 1)) (serie3 (+ a 1) n))))

/
*

*
* *5
C
*> *

+
+
+*

*> 8+ +
+
+
+

Ejemplo:
(define (cuadrado a)
(* a a))
(define (sum f a n)
(if (> a n)
0
(+ (f a) (sum f (+ a 1) n))))
(define (serie2 a n)
(sum cuadrado a n))
(define (termino i)
(/ i (+ (cubo i) 1)))
(define (serie3 a n)
(sum termino a n))

Funciones Lambda
!
,

'0
*

*<

5+<

5+

Ejemplo:
(lambda (x) (+ x 4))
Ejemplo:
=>(define cubo
(lambda (x) (* x x x)))
cubo
=>(cubo 3)
27

Ejemplo:
(define (serie f a n)
(if (> a n)
0
(+ (f a) (serie f (+ a 1) n))))
(define (serie4 a n)
(serie (lambda (i) (/ i (+ (cubo i) 1))) a n))

Uso del let


)

'0
*

**<
*<
<
<

85

< ' 85+


65 < ' 65+

5 < ' 5+
+
5+

Ejemplo: Una funcin que calcula el sueldo


neto:
@R24)/R1 6CP
*

*
*

**
*
*1

1!
1!

R2)/R+
*4R2)/R+
+
*4*4R2)/R+C 6+
+
+
+
+
+

Funciones que retornan funciones


Ejemplo: Escriba una funcin que recibe HT, SPH y
retorna una funcin que recibe como parmetro el
porcentaje de deduccin para calcular el salario neto:
*

*
*

6 R2)/R+

! *'
+
*1 *4R2)/R+*4*4R2)/R+'
+
+
+
+

@5**
LCC C
@5*
AE

8C 8CC+C 6+
8C 8CC+
LLK:896F

Ejemplo: Escribiremos una funcin que


calcula la derivada de una funcin, que
como se sabe es una funcin definida
como sigue:

cuando h es pequeo.

Cdigo:
*

*
*

&+

! *'
+
*D*1 * *> '&+
+* '
+
+&+
+
+

@5**
! C CCC8+9+
B9 CC89CCCCKK;67
@5*
! C CCC8+
AE
LLKB8L7F

GRACIAS..

También podría gustarte