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
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Tema</strong> 2: <strong>Características</strong> <strong>de</strong> <strong>la</strong> <strong>programación</strong> <strong>funcional</strong><br />
(- 4 8) ==> -4<br />
-4 ; El or<strong>de</strong>n normal no<br />
La reg<strong>la</strong> es que si estás haciendo <strong>programación</strong> <strong>funcional</strong>, obtienes <strong>la</strong>s mismas respuestas sea<br />
cual sea el or<strong>de</strong>n <strong>de</strong> evaluación. ¿Por qué no suce<strong>de</strong> así en el caso <strong>de</strong> (zero (random<br />
10))? Porque no es una función pura, ya que pue<strong>de</strong> <strong>de</strong>volver valores distintos en distintas<br />
invocaciones.<br />
Otra diferencia entre <strong>la</strong> evaluación normal y <strong>la</strong> evaluación aplicativa es <strong>la</strong> eficiencia. Veamos<br />
un ejemplo. Intenta computar<br />
(square (square (+ 2 3)))<br />
en or<strong>de</strong>n normal y <strong>de</strong> evaluación. En este caso el or<strong>de</strong>n <strong>de</strong> aplicación es más eficiente proque<br />
sólo suma 2 y 3 una vez, no cuatro. (Pero más a<strong>de</strong><strong>la</strong>nte, veremos que esto no es una reg<strong>la</strong><br />
general, a veces el or<strong>de</strong>n normal es más eficiente).<br />
2. Aproximación práctica a <strong>la</strong> PF<br />
2.1. <strong>Características</strong> <strong>de</strong>l paradigma <strong>funcional</strong><br />
Uno <strong>de</strong> los primeros mo<strong>de</strong>los computacionales, el cálculo <strong>la</strong>mbda (Alonzo Church, 1930),<br />
está basado completamente en un enfoque <strong>funcional</strong>, en <strong>la</strong> creación y uso <strong>de</strong> funciones<br />
matemáticas. Este mo<strong>de</strong>lo computacional estableció <strong>la</strong>s bases teóricas <strong>de</strong> lo que más tar<strong>de</strong><br />
serían los lenguajes <strong>de</strong> <strong>programación</strong> <strong>funcional</strong>es.<br />
La popu<strong>la</strong>ridad <strong>de</strong>l paradigma <strong>funcional</strong> se ha <strong>de</strong>bido en gran medida al éxito <strong>de</strong>l lenguaje <strong>de</strong><br />
<strong>programación</strong> Lisp (y <strong>de</strong> sus dialectos, como Scheme). Tanto el Lisp como Scheme son<br />
lenguajes que se están utilizando en <strong>la</strong> actualidad (como ejemplo <strong>de</strong> uso <strong>de</strong>l Lisp como<br />
lenguaje <strong>de</strong> <strong>programación</strong> <strong>de</strong> proyectos reales, leer <strong>la</strong> char<strong>la</strong> <strong>de</strong> Paul Graham<br />
(http://www.paulgraham.com) titu<strong>la</strong>da Beating the Averages<br />
(http://www.paulgraham.com/avg.html) , en <strong>la</strong> que explica cómo utilizó el Lisp para<br />
construir Viaweb (http://www.paulgraham.com/vwfaq.html) , una <strong>de</strong> <strong>la</strong>s primeras tiendas<br />
on-line adquirida en 1998 por Yahoo).<br />
Hay que resaltar que tanto Lisp como Scheme no son lenguajes <strong>funcional</strong>es puros (a<br />
diferencia <strong>de</strong> otros lenguajes como Haskell). En estas primeras c<strong>la</strong>ses vamos a usar<br />
únicamente <strong>la</strong>s carracterísticas <strong>funcional</strong>es <strong>de</strong> Scheme. Dejaremos para más a<strong>de</strong><strong>la</strong>nte sus<br />
construcciones imperativas.<br />
Entre <strong>la</strong>s características <strong>de</strong>l paradigma <strong>funcional</strong> <strong>de</strong>stacamos:<br />
• Programación <strong>de</strong>c<strong>la</strong>rativa<br />
• Definición y evaluación <strong>de</strong> funciones<br />
Page 9<br />
Copyright © 2006 Depto. CCIA, Universidad <strong>de</strong> Alicante All rights reserved.