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.

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

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

Saved successfully!

Ooh no, something went wrong!