Está en la página 1de 58

El lenguaje Haskell 98

Un lenguaje perezoso completamente Curry con sobrecarga.

Juan Pedro Villa <jvillais+haskell@gmail.com>

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

%n!roducci'n Programaci'n 3uncional Programaci'n 3uncional con )askell 45


Programaci'n (uncional /+sica con )askell 45 ,omunidad )askell

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

Cualidades de los lenguajes de !rogramacin uncional

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.

Cualidades de los lenguajes de !rogramacin uncional (2)

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

"entajas de la !rogramacin uncional (con Haskell)


=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

#esventajas de la !rogramacin uncional

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

$enguajes de !rogramacin uncional


Lisp $cheme 7L )askell )ope 7iranda @r1ell

Programacin uncional en un lenguaje im!erativo

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

$as matem%ticas en la !rogramacin uncional

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

Haskell &rooks Curr' ((9)) * (982)

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.

Presente ' uturo del lenguaje Haskell


)askell en educaci'n )askell en inves!igaci'n )askell en in(orm+!ica

Haskell en cinco !asos


D.%ns!alar )askell
D.F), J.)ugs

J.%niciar )askell L.<scri/ir el primer programa en )askell


D.)ello #orldM J.3ac!orial

N.)askell como calculadora O.Pasos pos!eriores

+i!os sim!les !rede inidos


<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

(&&) :: Bool -> Bool -> Bool. ,onjunci'n

l'gica.

(||) :: Bool -> Bool -> Bool. ?is&unci'n

l'gica.

not :: Bool -> Bool. 9egaci'n l'gica. otherwise :: Bool. 3unci'n cons!an!e que

devuelve el valor 8rue.

$os ti!os Int e Integer

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

$os ti!os Int e Integer (,unciones ' o!eradores)


(+),(-),(*) :: Int -> Int -> Int. Suma, resta y produ to de enteros. di",mod :: Int -> Int -> Int. ,ocien!e &

(!) :: Int -> Int -> Int. @perador po!encia.

residuo.

a#s :: Int -> Int. Valor a/solu!o. si$num :: Int -> Int. ?evuelve CD- E ' D segBn el

signo.

ne$ate :: Int -> Int. %nvier!e el signo 0uso

pre(ijo con 0C22.

e"en, odd :: Int -> Bool. ,omprue/an la

na!uraleza par o impar de un en!ero.

$os ti!os ,loat ' #ouble


*epresen!an nBmeros reales. 9o!aci'n6


)a/i!ual6 %.&', -%'.&(', %.) ' %. ,ien! (ica6 %.'e* ' %.'e-%*.
(+),(*),(-),(+) :: ,loat -> ,loat -> ,loat.

3unciones & operadores6

$uma- produc!o- res!a & divisi'n real.

(!) :: ,loat -> Int -> ,loat. @perador

po!encia.

(**) :: ,loat -> ,loat -> ,loat. @perador

po!encia.

$os ti!os ,loat ' #ouble (,unciones ' o!eradores)


a#s :: ,loat -> ,loat. Valor a/solu!o. si$num :: ,loat -> ,loat. CD.E- E.E ' D.E segBn

el signo.

ne$ate :: ,loat -> ,loat. Valor negado. Aso

pre(ijo C.

sin, asin, os, a os, tan, atan :: ,loat -> ,loat. 3unciones !rigonom.!ricas 0radianes2. atan- :: ,loat -> ,loat -> ,loat.

>rco!angen!e.

lo$, e.p :: ,loat -> ,loat. 3unciones &

logar !mica & e:ponencial.

s/rt :: ,loat -> ,loat. *a z cuadrada.

$os ti!os ,loat ' #ouble (,unciones ' o!eradores) (2)


pi :: ,loat. <l valor del nBmero pi. trun ate, round, 0loor, Inte$er ' ,loat -> Int.

eilin$ :: ,loat ->

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.

O!eradores de igualdad ' orden

Para !odos los !ipos /+sicos.


> 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

Constructores de ti!os !rede inidos

8ipos es!ruc!urados que permi!en represen!ar coleccions de o/je!os.


8uplas Lis!as <l cons!ruc!or de !ipo

+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

0%n!eger- =ool2 0%n!eger- %n!eger- %n!eger2

$istas

<s una colecci'n de E o m+s elemen!os del mismo !ipo. )a& dos cons!ruc!ores6

PQ represen!a la lis!a vac a. 062 permi!e aKadir un elemen!o al principio de la lis!a.

$i "%, "-, ... , "n son valores con !ipo !en!onces "%:("-:(...("n-%:("n:89)))) es una lis!a con !ipo Pt9. <jemplos6

PD..LQ R D60J60L6PQ22 R ... ,adenas de carac!eres6 P,harQ o $!ring.

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. prioridad den!i(icador in0i.l prioridad iden!i(icador in0i.r prioridad iden!i(icador

/sociatividad ' !rioridad de los o!eradores !rede inidos

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

O!eradores rente a unciones

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

di" ( - 7 ( ?di"? ( + - 7 (+) ( -

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.

$o verdaderamente im!ortante en Haskell


<valuaci'n perezosa $is!ema de clases 7'nadas para <n!radaC$alida Puramen!e (uncional ,urri(icaci'n

El sistema de clases de Haskell

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

2tandard Haskell Classes

El sistema de clases de Haskell

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.

El sistema de clases de Haskell

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

Conclusiones4 enlaces ' re erencias bibliogr% icas

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

5e erencias bibliogr% icas

)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

También podría gustarte