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 />

En el caso general, aplicamos <strong>la</strong> primera función al resultado <strong>de</strong> <strong>la</strong> l<strong>la</strong>mada recursiva <strong>de</strong><br />

aplicar el resto <strong>de</strong> funciones al número x.<br />

2.4.1. Lambda en Scheme<br />

Los tipos <strong>de</strong> datos primitivos se pue<strong>de</strong>n manejar directamente en los lenguajes <strong>de</strong><br />

<strong>programación</strong>, sin darles nombre (asignarlos a variables). Por ejemplo, cuando queremos<br />

l<strong>la</strong>mar a una función cualquiera (como cuadrado) con el número "4" como argumento,<br />

escribimos directamente "4" y <strong>de</strong> esa forma nos referimos a ese número: "4":<br />

(cuadrado 4)<br />

No hace falta hacer:<br />

(<strong>de</strong>fine cuatro 4)<br />

(cuadrado cuatro)<br />

Hemos dicho que <strong>la</strong>s funciones son en Scheme tipos <strong>de</strong> datos primitivos. ¿Cumplen entonces<br />

<strong>la</strong> propiedad anterior? ¿Es posible usar una función sin darle un nombre? La respuesta es que<br />

sí, utilizando <strong>la</strong> forma especial <strong>la</strong>mbda.<br />

La sintaxis <strong>de</strong> <strong>la</strong>mbda es:<br />

(<strong>la</strong>mbda ( ... ) )<br />

La forma especial <strong>la</strong>mbda construye una función sin nombre y <strong>la</strong> <strong>de</strong>vuelve como resultado.<br />

Para <strong>de</strong>finir una función son necesarios dos elementos: sus argumentos y su cuerpo. Estos<br />

dos elementos son los que se <strong>de</strong>finen a continuación <strong>de</strong> <strong>la</strong> pa<strong>la</strong>bra <strong>la</strong>mbda.<br />

Así, por ejemplo, en <strong>la</strong> siguiente expresión:<br />

(<strong>la</strong>mbda (x)<br />

(* x x))<br />

se <strong>de</strong>fine una función que tiene un único argumento (x) y que tiene como cuerpo <strong>la</strong> expresión<br />

(* x x). Es <strong>la</strong> función cuadrado.<br />

Si ejecutamos esa expresión en el intérprete <strong>de</strong> Scheme veremos que el resultado <strong>de</strong> su<br />

evaluación es un procedimiento:<br />

>(<strong>la</strong>mbda (x) (* x x))<br />

#procedure:3:2<br />

Con ese procedimiento que nos <strong>de</strong>vuelve Scheme (el procedimiento l<strong>la</strong>mado con el críptico<br />

nombre <strong>de</strong> #procedure:3:2) po<strong>de</strong>mos hacer bastantes cosas. Algunos ejemplos:<br />

1. Po<strong>de</strong>mos darle un nombre y obtener una función con nombre que <strong>de</strong>spués podremos usar:<br />

Page 15<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!