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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

(elemento? 'e 'cocodrilo)<br />

#f<br />

2.4. Funciones como tipo <strong>de</strong> datos primitivo<br />

Otra característica fundamental <strong>de</strong> los lenguajes <strong>funcional</strong>es es que <strong>la</strong>s funciones son<br />

consi<strong>de</strong>radas un tipo <strong>de</strong> dato primitivo.<br />

Un tipo <strong>de</strong> dato primitivo es aquel que:<br />

• pue<strong>de</strong> ser el valor <strong>de</strong> una variable (en terminología <strong>de</strong> <strong>programación</strong> <strong>funcional</strong>: nombrado<br />

por un i<strong>de</strong>ntificador)<br />

• un argumento <strong>de</strong> una función<br />

• el valor que <strong>de</strong>vuelve una función<br />

• componente <strong>de</strong> una estructura <strong>de</strong> datos mayor<br />

Por ejemplo, los números, los caracteres o <strong>la</strong>s ca<strong>de</strong>nas son datos primitivos en <strong>la</strong> mayor parte<br />

<strong>de</strong> lenguajes <strong>de</strong> <strong>programación</strong>. Sin embargo, resulta poco frecuente que podamos hacer todas<br />

estas cosas con una función o un procedimiento. Es una <strong>de</strong> <strong>la</strong>s características más<br />

sorpren<strong>de</strong>ntes <strong>de</strong> los lenguajes <strong>funcional</strong>es:<br />

• Una variable pue<strong>de</strong> tener como valor un procedimiento<br />

• Po<strong>de</strong>mos <strong>de</strong>finir una función que toma como argumentos otras funciones<br />

• Po<strong>de</strong>mos <strong>de</strong>volver un procedimiento como resultado <strong>de</strong> una l<strong>la</strong>mada a otro procedimiento<br />

• Po<strong>de</strong>mos construir estructuras <strong>de</strong> datos que contengan procedimientos como elementos<br />

(listas <strong>de</strong> procedimientos, por ejemplo)<br />

Vamos a ver un ejemplo <strong>de</strong> cada una <strong>de</strong> estas características en Scheme:<br />

Una función pue<strong>de</strong> ser nombrada con un i<strong>de</strong>ntificador.<br />

Ya hemos visto algún ejemplo curioso <strong>de</strong> esto:<br />

(<strong>de</strong>fine suma +)<br />

suma<br />

>(suma 1 2 3)<br />

6<br />

(<strong>de</strong>fine + -)<br />

(+ 4 2)<br />

2<br />

(<strong>de</strong>fine + suma)<br />

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

Po<strong>de</strong>mos comprobar en el ejemplo que los símbolos 'suma', '+' o '-' no son más que<br />

i<strong>de</strong>ntificadores ligados a procedimientos.<br />

En Scheme cuando <strong>de</strong>finimos una función con un nombre, <strong>la</strong> re<strong>la</strong>ción entre <strong>la</strong> función y el<br />

nombre es <strong>la</strong> misma que <strong>la</strong> re<strong>la</strong>ción entre una variable y un valor. El nombre <strong>de</strong> <strong>la</strong> función es<br />

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

Page 12

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

Saved successfully!

Ooh no, something went wrong!