03.12.2012 Views

Tema 2: Características de la programación funcional

Tema 2: Características de la programación funcional

Tema 2: Características de la programación funcional

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Tema</strong> 2: <strong>Características</strong> <strong>de</strong> <strong>la</strong> <strong>programación</strong> <strong>funcional</strong><br />

(* x (factorial (- x 1)))))<br />

>(factorial 8)<br />

40320<br />

>(factorial 30)<br />

265252859812191058636308480000000<br />

Sumatorio<br />

Otro ejemplo <strong>de</strong> función recursiva es el sumatorio <strong>de</strong>s<strong>de</strong> un número inicial hasta un límite.<br />

Matemáticamente se expresa con <strong>la</strong> siguiente fórmu<strong>la</strong>:<br />

En Scheme:<br />

(<strong>de</strong>fine (sumatorio min max)<br />

(if (> min max)<br />

0<br />

(+ min (sumatorio (+ 1 min) max))))<br />

> (sumatorio 3 12)<br />

75<br />

Por último un ejemplo utilizando símbolos y <strong>la</strong>s funciones que vimos en una c<strong>la</strong>se anterior<br />

empty?, first, bf y equal?.<br />

Recor<strong>de</strong>mos qué hace cada una <strong>de</strong> estas funciones:<br />

• (empty? pa<strong>la</strong>bra): comprueba si pa<strong>la</strong>bra es una ca<strong>de</strong>na vacía<br />

• (first pa<strong>la</strong>bra): <strong>de</strong>vuelve el primer carácter <strong>de</strong> un símbolo (como símbolo a su<br />

vez)<br />

• (bf pa<strong>la</strong>bra): <strong>de</strong>vuelve el resto <strong>de</strong> un símbolo, <strong>de</strong>spués <strong>de</strong> haber quitado su primer<br />

carácter<br />

• (equal? pal1 pal2): comprueba si dos símbolos son iguales<br />

La función (elemento? x pa<strong>la</strong>bra) <strong>de</strong>vuelve #t o #f <strong>de</strong>pendiendo <strong>de</strong> si x es un<br />

símbolo que está <strong>de</strong>ntro <strong>de</strong> pa<strong>la</strong>bra:<br />

(<strong>de</strong>fine (elemento? x pa<strong>la</strong>bra)<br />

(cond<br />

((empty? pa<strong>la</strong>bra) #f)<br />

((equal? x (first pa<strong>la</strong>bra)) #t)<br />

(else (elemento? x (bf pa<strong>la</strong>bra)))))<br />

> (elemento? 'a 'ho<strong>la</strong>)<br />

#t<br />

Page 11<br />

Copyright © 2006 Depto. CCIA, Universidad <strong>de</strong> Alicante All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!