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

Atención, pregunta<br />

¿Cuál es el ámbito <strong>de</strong> <strong>la</strong> variable y? Si renombráramos y por w, ¿qué ocurrencias <strong>de</strong><br />

y tendríamos que cambiar?<br />

Volviendo al asunto principal que nos concierne, los programas <strong>de</strong>c<strong>la</strong>rativos frente a los<br />

imperativos, para saber si un lenguaje es <strong>de</strong>c<strong>la</strong>rativo basta con comprobar el siguiente test:<br />

<strong>de</strong>ntro <strong>de</strong>l ámbito <strong>de</strong> <strong>de</strong>c<strong>la</strong>ración <strong>de</strong> <strong>la</strong>s variables x1 ... xn todas <strong>la</strong>s ocurrencias <strong>de</strong> una<br />

expresión e que contiene únicamente <strong>la</strong>s variables x1 ... xn tienen el mismo valor.<br />

Como consecuencia, los lenguajes <strong>de</strong>c<strong>la</strong>rativos tienen una interesante propiedad <strong>de</strong><br />

optimización: si una expresión e aparece en varios lugares <strong>de</strong>ntro <strong>de</strong> un mismo ámbito, sólo<br />

es necesario evaluar<strong>la</strong> una vez. Veamos por ejemplo, el siguiente programa:<br />

(<strong>de</strong>fine (f x)<br />

...)<br />

(+ (f 2) (f 2))<br />

La expresión (f 2) se utiliza dos veces para sumar el resultado. En un paradigma<br />

<strong>de</strong>c<strong>la</strong>rativo esta expresión no va a cambiar <strong>de</strong> valor y va a <strong>de</strong>volver siempre el mismo valor.<br />

Por ello, es posible guardar el valor que <strong>de</strong>vuelve en una nueva variable y sólo realizar <strong>la</strong><br />

l<strong>la</strong>mada una vez:<br />

(<strong>de</strong>fine (f x)<br />

...)<br />

(<strong>de</strong>fine y (f 2))<br />

(+ y y)<br />

Una consecuencia muy importante <strong>de</strong> esta propiedad es que en un paradigma <strong>de</strong>c<strong>la</strong>rativo una<br />

función l<strong>la</strong>mada con los mismos argumentos siempre <strong>de</strong>vuelve el mismo resultado.<br />

Se hace notar<br />

Lo repetimos aquí, para que resalte más: en un paradigma <strong>de</strong>c<strong>la</strong>rativo (como por<br />

ejemplo, el paradigma <strong>funcional</strong>) una función l<strong>la</strong>mada con los mismos<br />

argumentos siempre <strong>de</strong>vuelve el mismo valor.<br />

Hemos dicho que en los lenguajes <strong>de</strong>c<strong>la</strong>rativos <strong>la</strong>s variables <strong>de</strong>notan nombres asociados a<br />

valores. En los lenguajes imperativos, sin embargo, <strong>la</strong>s variables <strong>de</strong>notan referencias a<br />

valores que existen en algún lugar <strong>de</strong>l or<strong>de</strong>nador (estado) y que pue<strong>de</strong>n ser cambiados con<br />

sucesivas instrucciones. Este es otro elemento que distingue los lenguajes imperativos <strong>de</strong> los<br />

<strong>de</strong>c<strong>la</strong>rativos. En los lenguajes <strong>de</strong>c<strong>la</strong>rativos no existe ese concepto <strong>de</strong> valor que resi<strong>de</strong> en<br />

algún lugar <strong>de</strong>l or<strong>de</strong>nador al que nos referimos mediante una variable.<br />

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