Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Haskell
Haskell
Introduccin
Las razones agudas son ronquidos para los o dos !on!os". #illiam $hakespeare
Objetivos
Objetivo general
%nves!igar & aprender las carac!er s!icas de la programaci'n (uncional a par!ir del lenguaje puramen!e (uncional )askell.
Objetivos especficos *esponder a la pregun!a por la impor!ancia del aprendizaje de un lenguaje de programaci'n (uncional & de su uso en la in(orm+!ica. ,omparar el paradigma (uncional con o!ros paradigmas de programaci'n- iden!i(icando las ven!ajas & desven!ajas de cada uno- especialmen!e en !.rminos de modularizaci'n.
Objetivos (2)
Objetivos especficos (2)
%n!erpre!ar los resul!ados o/!enidos del proceso de inves!igaci'n & de ela/oraci'n de programas en el lenguaje de programaci'n )askell para la de!erminaci'n de los aspec!os (undamen!ales de un lenguaje (uncional. Par!icipar en una comunidad de escri!ura cola/ora!iva 01iki2 median!e el uso & la pu/licaci'n de con!enidos relacionados con )askell & la programaci'n (uncional. ,onocer la es!ruc!ura /+sica de un pro&ec!o de inves!igaci'n que puede aplicarse o servir como /ase para o!ros.
Contenidos
,onclusiones
Programacin uncional
Programacin uncional
La programaci'n (uncional es un paradigma de programaci'n declara!iva /asado en el uso de (unciones ma!em+!icas. ,arac!er s!icas6
7odo de evaluaci'n6 %mpacien!e o perezosa. 3unciones de primer orden o de orden superior. %n(erencia de !ipos & polimor(ismo o lenguajes li/res de !ipos 0no !ipi(icados2 o con !ipi(icaci'n din+mica.
8odos los procedimien!os son (unciones & dis!inguen claramen!e los valores de en!rada 0par+me!ros2 de los de salida 0resul!ados2. 9o e:is!en varia/les ni asignaciones ; las varia/les han sido reemplazadas por los par+me!ros. 9o e:is!en ciclos ; .s!os han sido reemplazados por las llamadas recursivas.
<l valor de una (unci'n depende s'lo del valor de sus par+me!ros & no del orden de evaluaci'n o de la !ra&ec!oria de ejecuci'n que llev' a la llamada. Las (unciones son valores de primera clase.
=revedad 3acilidad para comprender 7anejo de los !ipos de da!os *eu!ilizaci'n de c'digo & polimor(ismo <valuaci'n perezosa & programas modulares >/s!racciones poderosas & (unciones como valores de primera clase *ecolecci'n de /asura
<l inconvenien!e principal ! picamen!e ha sido la ine(iciencia en la ejecuci'n de los lenguajes (uncionales. ?e/ido a su na!uraleza din+micaes!os lenguajes siempre han sido in!erpre!ados m+s que compilados- resul!ando en una p.rdida sus!ancial en velocidad de ejecuci'n.
<l requisi!o /+sico para la programaci'n (uncional en cualquier lenguaje es la disponi/ilidad de la recursi'n & un mecanismo general de (unciones adecuado. An pro/lema ! pico en la programaci'n de es!ilo (uncional es el cos!o de llevar a ca/o !odos los ciclos median!e la recursi'n. Pero e:is!e una (orma de recursi'n que puede conver!irse (+cilmen!e a una es!ruc!ura es!+ndar de ciclo- & se llama recursi'n de cola- donde la Bl!ima operaci'n de un procedimien!o es llamarse a s mismo.
3unciones recursivas
$e ha/la de de(iniciones recursivas. %nven!ado por >lonzo ,hurch como un (ormalismo ma!em+!ico para e:presar el c'mpu!o por medio de (unciones.
,+lculo lam/da
El lenguaje Haskell 98
Haskell
An lenguaje puramen!e (uncional (uer!emen!e !ipi(icado- con (unciones de orden superiorpolimor(ismo- sis!ema de clases de !iposm'nadas- evaluaci'n perezosa- ... 0%magen !omada de )askell C )askell#iki2
Haskell
Lenguaje de programacin Haskell
Paradigma de computacin Ao de aparicin Tipos de datos Implementaciones Estndar Influencias de Influencias en 3uncional- no es!ric!o- modular D44E <s!+!icos & d./iles F),- )ugs- 9),- J),- Ghc )askell 45 7iranda- 7L- Fo(er P&!hon- Perl
Historia
3unc!ional Programming and ,ompu!er >rchi!ec!ure 03P,> H5I2 )askell *epor! 111.haskell.org )askell 45 )askell #iki 8imeline 0pd(2 )askell JEE5
L'gico & ma!em+!ico nor!eamericano. Pionero de la l'gica ma!em+!ica moderna. ?esarroll' la l'gica com/ina!oria- que es la /ase de un es!ilo de programaci'n (uncional. $u !ra/ajo ha sido B!il en ciencias de la compu!aci'n & en el diseKo de lenguajes.
<l !ipo Bool <l !ipo Int <l !ipo Integer <l !ipo loat <l !ipo !ouble <l !ipo C"ar
El ti!o &ool
Los valores de es!e !ipo represen!an e:presiones l'gicas- cu&o resul!ado puede ser 8rue o 3alse. 3unciones & operadores6
l'gica.
l'gica.
not :: Bool -> Bool. 9egaci'n l'gica. otherwise :: Bool. 3unci'n cons!an!e que
Los valores del !ipo %n! son nBmeros en!eros de precisi'n limi!ada que cu/ren al menos el in!ervalo J4 J4 PCJ - J ; DQ. Los valores del !ipo %n!eger son nBmeros en!eros de precisi'n ilimi!ada. 3unciones & operadores6
(+),(-),(*) :: Int -> Int -> Int. Suma, resta y produ to de enteros. di",mod :: Int -> Int -> Int. ,ocien!e &
residuo.
a#s :: Int -> Int. Valor a/solu!o. si$num :: Int -> Int. ?evuelve CD- E ' D segBn el
signo.
)a/i!ual6 %.&', -%'.&(', %.) ' %. ,ien! (ica6 %.'e* ' %.'e-%*.
(+),(*),(-),(+) :: ,loat -> ,loat -> ,loat.
po!encia.
po!encia.
a#s :: ,loat -> ,loat. Valor a/solu!o. si$num :: ,loat -> ,loat. CD.E- E.E ' D.E segBn
el signo.
pre(ijo C.
sin, asin, os, a os, tan, atan :: ,loat -> ,loat. 3unciones !rigonom.!ricas 0radianes2. atan- :: ,loat -> ,loat -> ,loat.
>rco!angen!e.
pi :: ,loat. <l valor del nBmero pi. trun ate, round, 0loor, Inte$er ' ,loat -> Int.
trun ate elimina la par!e decimal. round redondea al en!ero m+s pr':imo. 0loor devuelve el en!ero in(erior. eilin$ devuelve el en!ero superior.
0romInt :: Int -> ,loat & 0romInte$er :: Inte$er -> ,loat. ,onversi'n de !ipo.
El ti!o C-ar
*epresen!a un car+c!er 0una le!ra- un d gi!o- un signo- e!c.2. 3unciones & operadores6
ord :: 1har -> Int. ?evuelve el c'digo >$,%%. hr :: Int -> 1har. %nversa a ord. is2pper,is3ower,is4i$it,is5lpha :: 1har -> Bool. to2pper,to3ower :: 1har -> 1har.
> 7a&or que 6 7enor que 77 %gual a >7 7a&or o igual que 67 7enor o igual que +7 ?is!in!o de
+u!las
Ana !upla es un da!o compues!o donde el !ipo de de cada componen!e puede ser dis!in!o. $i "%, "-, ... , "n son valores con !ipos !D!J- ... - !n en!onces ("%, "-, ... , "n) es una !upla con !ipo (t%, t-, ... , tn). <jemplos6
$istas
<s una colecci'n de E o m+s elemen!os del mismo !ipo. )a& dos cons!ruc!ores6
$i "%, "-, ... , "n son valores con !ipo !en!onces "%:("-:(...("n-%:("n:89)))) es una lis!a con !ipo Pt9. <jemplos6
El constructor de ti!o *.
8ipos (uncionales6
$i t%, t-, ... , tn ,tr son !ipos v+lidos en!onces t% -> t--> ... -> tn -> tr es el !ipo de una (unci'n con n argumen!os. ,a torial :: Inte$er -> Inte$er.
<jemplos6
Comentarios
An comen!ario es un !e:!o que acompaKa al programa pero que es ignorado por el evaluador. )a& dos modos de incluir comen!arios en un programa6
,omen!arios de una sola l nea6 ,omienzan por dos guiones & a/arcan has!a el (inal de la l nea. ,omen!arios de m+s de una l nea6 ,omienzan por los carac!eres :- & aca/an en -;. Pueden a/arcar varias l neas & anidarse.
O!eradores
$e !ra!a de (unciones con dos argumen!os cu&o nom/re es sim/'lico 0cadena de signos2 & que pueden ser invocados de (orma in(ija. >l de(inir un operador- puede de(inirse su prioridad 0en!ero en!re E & 42 & su asocia!ividad.
in0i.r < .
in0i.l < == in0i.r > !, !!, ** in0i.l * *, +, ?/uot?, ?rem?, ?di"?, ?mod? in0i.l @ +, in0i.r ' :, ++ in0i. ( 77, +7, 6, 67, >, >7, ?elem?, ?notAlem? in0i.r & && in0i.r - || in0i.l % >>, >>7 in0i.r % 766 in0i.r ) B, B=, ?se/?
Los operadores se usan de modo in(ijo- mien!ras que las (unciones se usan de modo pre(ijo. Los dos concep!os son !an similares que )askell permi!e conver!ir cualquier operador en una (unci'n de dos argumen!os- & una (unci'n de dos argumen!os puede conver!irse en un operador. <jemplos6
Com!aracin de !atrones
<n )askell- un argumen!o puede ser un pa!r'n. <s posi/le de(inir una (unci'n dando m+s de una ecuaci'n para .s!a. ,ada ecuaci'n de(ine el compor!amien!o de la (unci'n para dis!in!as (ormas del argumen!o- & los pa!rones permi!en cap!urar dicha (orma. >l aplicar la (unci'n a un par+me!ro concre!o- la comparaci'n de pa!rones de!ermina la ecuaci'n a u!ilizar. <l uso de pa!rones permi!e modelar c'mo se evaluar+ una llamada a una (unci'n a par!ir de sus argumen!os.
Com!aracin de !atrones
Pa!rones cons!an!es Pa!rones para lis!as Pa!rones para !uplas Pa!rones ari!m.!icos Pa!rones nom/rados o seud'nimos <l pa!r'n su/ra&ado Pa!rones & evaluaci'n perezosa
E0!resiones case
<s posi/le realizar una compro/aci'n de pa!rones en cualquier pun!o de una e:presi'n. Para ello de/e usarse la cons!rucci'n case. $in!a:is6
ase e.presiCn o0
patrCn% patrCn... patrCnn -> -> -> -> resultado% resultado... resultadon
$a uncin error
<s una (unci'n prede(inida que permi!e al programador !erminar la evaluaci'n de una e:presi'n & mos!rar un mensaje por pan!alla. $in!a:is6
error DmensaEeF
<jemplo6
raiG1uadrada n 7 i0 n >7 ) then s/rt else error DHaIG ompleEaF
,unciones a tro1os
<n las (unciones a !rozos o por par!es- el resul!ado depende de cier!a condici'n. Las condiciones de/en aparecer despu.s de una guarda 0S2 & son operaciones /ooleanas. <jemplo6
a/solu!o 66 %n!eger C> %n!eger S : >R E R : S : < E R C:
E0!resiones condicionales
@!ro modo de escri/ir e:presiones cu&o resul!ado dependa de cier!a condici'n es6
i0 e.presiCnBool then e.presiCnSI else e.presiCnJo i0 ' > - then %).) else (%).) + ).))
#e iniciones locales
<n algunas ocasiones- es convenien!e dar un nom/re a una su/e:presi'n que aparece varias veces en o!ra & u!ilizar es!e nom/re en lugar de la e:presi'n. $on el mecanismo m+s /+sico que proporciona )askell para conseguir encapsulamien!o. ,on las de(iniciones locales se gana legi/ilidad & e(iciencia.
E0!resiones lambda
)askell permi!e de(inir (unciones an'nimas usando e:presiones lam/da. $on B!iles al manejar (unciones de orden superior 0que !oman como argumen!o o!ras (unciones2.
2angrado
La disposici'n del !e:!o del programa delimi!a las de(iniciones median!e la regla del (uera de juego 0o((side rule o la&ou!2. Ana de(inici'n aca/a con el primer !rozo de c'digo con un margen izquierdo menor que el del comienzo de la de(inici'n ac!ual.
<valuaci'n perezosa $is!ema de clases 7'nadas para <n!radaC$alida Puramen!e (uncional ,urri(icaci'n
<l sis!ema de clases de )askell permi!e res!ringir el !ipo de cier!as (unciones polim'r(icas imponiendo condiciones a los !ipos usados en su declaraci'n. <s!as condiciones vienen dadas en (orma de predicados que los !ipos de/en veri(icar.
La clase A/ de Krelude6 ,lase cu&as ins!ancias pueden compararse a !rav.s del operador de igualdad. La clase Lrd de Krelude6 $us miem/ros son 062- 0672- 0>2- 0>72- ma.- min & ompare. Head & Show6 Los resul!ados de/en presen!arse en la pan!alla en (orma de cadenas de carac!eres 0Show2 o cons!ruirse a par!ir de .s!as 0Head2.
9um- %n!egral & 3rac!ional6 ?e(inidas para so/recargar operaciones ari!m.!icas para que !odos los !ipos num.ricos puedan usarlas. *a!io6 Proporciona !ipos racionales so/re varios !ipos num.ricos.
Comunidad Haskell
)askell #iki Lis!as de correo- canal %*,- /logs- no!icias- e!c. *econocimien!os Programadores e inves!igadores en )askell & en programaci'n (uncional
3onadius
,rag
Enlaces
,ola/oradores ?e #ikipedia. T)askell.T #ikipedia- La <nciclopedia Li/re. <h!!p6UUes.1ikipedia.orgU1ikiU)askell>. )askell. )askell communi!&. <h!!p6UUhaskell.orgU>. )askell P=1iki. <h!!p6UUhaskell.p/1iki.comU>. T)askell *esearch Projec!.T 8he =lack ,a!. < h!!p6UUjpvi!/c.comUhaskell.asp:>.
)udak- Paul- John Pe!erson- and Joseph ). 3asel. > Fen!le %n!roduc!ion !o )askell 45. 0pd(2 )ughes- John. #h& 3unc!ional Programming 7a!!ers. %ns!i!u!ionen (or ?a!ave!enskap. 0pd(2 Jones- $imon Pe&!on- ed. )askell 45 Language and Li/raries !he *evised *epor!. )askell ,ommuni!&. 0pd(2 Jones- $imon Pe&!on. #earing !he )air $hir! a *e!rospec!ive on )askell. 7icroso(! *esearch. 0pd(2 *uiz- =las- 3rancisco Fu!i.rrez- Pa/lo Fuerrero- and Jos. Fallardo. *azonando ,on )askell An ,urso $o/re Programaci'n 3uncional. 7adrid6 8homson- JEEN. 01e/2