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