haskell - uma abordagem prática (incompleto)

Upload: caio-silva

Post on 13-Jul-2015

1.042 views

Category:

Documents


48 download

TRANSCRIPT

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    1/61

    Claudio Cesar de SaIMar1cJo Ferreira da Silva

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    2/61

    "livl'oJ1."skelt.HowJ.tec" - 20nAjlflj9 - 14:49 - page 5 - #5

    Sumario2323

    25U!.l 0 Paradigm Funeiouall .2 ,2 U 11m Vi,,: ! ; ,o CrniCl:1

    26262723

    1.3 Hi::;t6doo..,.""1.4 0 bjetivos deste Livre ,

    Iniclando em Haskell29'2 9 '32.2 Visuallsando Ftm.c0el:iem Bloeos

    2.4 Exereicios Pmpust013 373 Um2l. Visao Funeloaal da Indluciio

    3.3 Perieos d!a Recursao 4 .3~d4 Gasameni;,Q de fadroes 4 1 5

    473 , A 3 x81'cic:ios Pl'OPDStos

    5

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    3/61

    "livl'oJ1."skelt.HowJ.tec" - 20nAjlflj9 - 14:49 - page 6 - #6

    [) IIASKR[,F" IlM A. ABORDAGETI.! pnATICA

    5151

    4.2 Tipos Compostos com T\: ip~. !134.3 Exerdc:io Resol vido .

    55

    4.4 Exercicios Prop ostos5761

    5 l.ista6G.l Nocces 00bre Llstas ,5.2 Listasem II~l.Sk.ell

    5.2.1 ~e:I]l.pl035.,3 APlln~ao Observe5,.4 Cempreensao de Lista (L~st CQmpreh.~rJ;S1,o1l )5,.5 Outros Exern plos5.tl St71WI'Ii,..,..

    5.6.1 Conversoes entre Tipcs5.6,2 Caracteres Esp~da.ls, ,

    63636467

    5.8 EXel'clc:ios Prop ostos

    n74758081818283

    6 Tiprn; di e Dados6.1 T]po o BM iic-v::;

    6.1.1 Bod~MlOS

    8787

    6.1 ,2 Inteiros , 90! ! : i .1,3 CID"acteres , 9 36 J 4 Heal"

    6.2 Tip os Sinonimos6.3 Tipos Est~.'ntnrll!dos,li4 Operadores ,., ,

    9~}f ) D o10110 2

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    4/61

    "livl'oJ1."skelt.HowJ.tec" - 20nAjlflj9 - 14:49 - page 7 - #7

    smrARlo 77 Classes il l05

    7.1

    7.2 C]asses Derivndes , . , ., .7.:3 Hie:nlJ'tlittia. de Classsse Tipos

    7.3.1 Classe EUl1Il17.3 ,2 Cl~e Show,7.3,3 Classe Num

    tA Mauadias." , ."7 ' .4.1 Efeltos Colaterals ..7 ' A.2 C la sse & .~ .c ma J,

    H5U6H7lW.5 Exereiclos Propostos

    8.1 Breve Hlsto:riro1I!21121123

    8 .3 Ab;;;tr< tgo o8A SinbPi,;(: :

    8.;;,2 V1Hiave . is Ligadas ,8.5,3 Complemento , .,

    SA) Regr."I!sde A-l'ed'l~a.o (on A-cQuver.siio)8.6.,1 a-redex [ou o-reducao)8.6 ..2 t t- l- eC l el ( [ o u . r1 ~ 1. 'e rl nQ i io }8.6,3 f j l - l 'OOCX (o u ? ;r- rc du ~fw ) ,

    8:r SuL~tihti(:lll() , ."" . , . . ,8.7,1 Cuidados rom a Substituicao

    12412 7129'131lSI13113213213313513 6137ISS.

    8. 5 V ariav ei ::: L iv res ~ Ug-ooa :s8.5,1 Vil1"iaveis Livres .,

    I S S .8.8, 1 ~e:ll!lplo de Teste de Liberdade , 1 4 [ 1

    8.9 Consideracfoe8."".,.".".,8.9.,1 Esco]ha na Seqiiencia da Reducao

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    5/61

    "livl'oJ1."skeU.JlowJ.tec" - 20nAjlflj9 - 14:49 - page 8 - #8

    8 IIASKR[,F" IlMA. ABORDAGETI.! pnATICA

    1431 ' 1 4-10' Exerclclos Propostos

    {I Genel"u~izn~.io9.1 FLm"oes Ge[lriC

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    6/61

    "livl'oJ1."skelt.nowJ.tec" - 20nAj1flj9 - 14:49 - page f) - #9

    smrARlo 9 112Arvores il l91

    1 2 .1 N ( }~ , oG$s o br e 1\.lV01'($ . 19 112.2 Al'VOre!l Bin

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    7/61

    1 n U AS KEU, IJlIJA A BOl I tO A . Gf,ld PRATTe A

    15-1 Fun~Q~ de Esorlta15.2 run~i'ies de Leitura

    15,2-1 Exem plo s ,15,2,2 Um 'While

    15.3 Al'ql{UVQS , , , ,15,3.1 Op., .nll . ;~e'S coin htlmdIe/) 00bre Al"quivos15,3,2 Op e:ra9Je5 Diretas sobre Arquivos

    15.4 Tn;1ii!mIBl1to de Excet;Des15.5 E)(emp]o .. . .. . .. .. . . .

    15,5.1 Exe:cm;iiodo C6diga15.6 Exercfclos Propostos

    H ,. M Motiva~&o aos P ro blem as de fA .16.2 Problema des Vasos ,.,..,

    16.3 Q 1 _ l C b m - C ~ 1 , b C < = f I "10,3,1 De!:icri\;iIDH) , 3 , 2 l l: n] )~ e J:m :mtw;; iW e O:Sdigo .

    1604 Sobre as Il:nv~e.me.nt~e::; ,Hj,.5 Exercicios Prop ostos

    I! lB..eHexoes F'lna is17.1 Corn Direlto a M(l,t.!:~i'f01!mlt~?17.2 RBl]uisitos de 11 m Programa ,

    17 ,2 ,1 Ret lUJ i~i to o p u:r~ A v al ia cl u m FWgnwm1'7,2,2 Prograrnando com E1egalJJc~ ! I .

    LL3 0 Mundo clos Bloms Funcionais1[,:U k Armadilhes

    17A Epilogo .

    22322 32242 2 5227227228 ,2 3 02322 3 3238

    2 : 4 1 12411

    254254

    2 5 5

    26(J262265

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    8/61

    A.l Incerpretedor J- [ llw; . . - .. 268A.l, I Hepositorlo p . ' V 1 ' < ' I . . Dlmm.loodAJ.2 Proccdimcnto de [l1SttJ,h"4~iioA.[ ,3 Ambients de Execucso ,A.[ ,4 ] Op~e5 do Progrsrna ,A.1.5 Cotnandos do HUgl:i ..A.l,ti Como Conseguir Ajuda

    A,2: Compilador Haskell Glasgow ,A _2 .1 R epo oito rio p " V I ' < 1 , DowmooflA.~;L2 Proeedimento Je .hlstaJi'I!t;;i1.01\-2.3 Construindo um Exeeutavel

    26 927127 127127 1

    A.2,li 0 Interpretador do GHCA.2,5 OP~

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    9/61

    1 2 HASKELL: Ul\JA ABORDAGEJ>. I PMTICA

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    10/61

    A utm z~aQ die linguagens funcionais rnodemas [10 ensino d i e p r og ra rn agaD , ern CllU'SOSde aieud,"Lda computaqiic e ;;;iulilal'''.,;;,pode trazer gl'.",nde:., beneficios aos estudantes.No\;6es importances, como indu~;immetemetica e recursividede, s a o introdnsidas na-turalmonte. Tenhcobservado eBSG-S beueEidos desde (I 0.]1:0 de 2001, qmmcllo adoteio Haskellcomo Hngllage.ll~b{isica..para uraa disclpline de plDgianl~ Iuncioual, emCUl 'OOS de gradu~~io-

    Pt\!:lI:ieientAo a mecosresponder com hiteressadcs Illi lillgutlgeru l [.:f:: l .kd~,tl"()cando.material. .0 p.rof8S501-Claudio Cesar de Sli foi urua das Pe.550a5 com quem me CO[~respondo, desde 2U02. tuma s!l.tisfru;ao poder observar mn des resultados do selltrabalho, que seeoneretiza ua obra Haskell: UTil(.! a!to!"J[l,w~mpnitica.

    Tenho grande prazer de poder escrever a Apl'ese[l.ta~ii.o deste livro, constatandcque se tri!.itade uma obra muito bem-formulada e adequada aoensino de prQgr.&rII.a~iiQofuncional. 0 texto introduz 0;;; couceitos de forma didatiea, permltindo que mesmoestudautes de ID.'eas n a c o Jil'etamemte ~i.g;;td,l:lS ccmputacao POSsaJ.I1 Uri'll' proveito domaterial. l\las 0 livre, r~,i[[)se prende apenas aos conceitos elementares apresentatam b em ~ . ca! 'acte! 'L

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    11/61

    14 HASKELL: Ul\JA ABORDAGEJ>. I PMTICA

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    12/61

    Dedicaterias

    it i\1111TiaLuiza,pe1o er..]llilihrio ])I,oximo.A03 nossosfilhos, par torna..la distante,mas necessario, e11.1ualquer proceffiO"

    Claudio Ces3.1"de SA

    Aos. Ul(:USP{~B pelo apoio irrestrito emtod,()~os mementos lie lJ1i1l1~I:!,vida.A Prlseila qmc soubo tao bern comprccudcr os inCUS

    momeetos de ausenciaem ftm~ deste trabalho,Acsamigos, que sernpreacreditaram IIOmeu L:rIiLa~ho,

    1hb:ciD Ferreira da Silva

    Ando a.eoogt!r pOrqfl.e jd f.~vepresst!leuo f,,

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    13/61

    1 6 HASKELL: Ul\JA ABORDAGEJ>. I PMTICA

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    14/61

    Uma das formas de pensar do ser hum ano e utllizando 0 conceito de ind'!~(:a:rJ, A.ind]l~ii.o vhm, .anil .~i.

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    15/61

    is HASKELL: Ul\JA ABORDAGEJ> .I PMTICAa llnguagem e conheennentos de proglamagiiD~ um ]eigo potenciallza e concretlzalnteressantes desenvolvimentos [ 4 1 _E,s trut:uraQao do liv roE. : 3 ' m o -vimenta tnt! um a ebp1nii , &oa ~plml teflete ' O ! : : saltospara tL fi 'e nE e e para tl"Q;; queo texto segue, como objctivo de ] 1 5 . 0 ecbrccorrcgar olcicercom todos 00 dctalhcsdo pouto a.preOOIlta.tlo. AffilUl, h lL mu it ae notes de rodape, beui COUle) t n ( i u c a Q O e f J dePOll003 a [rente, onde um dado assuuto ~detalhado. Ora, em urn Cll.BO' coutrario, indi-C~e5 de ondetalassrmto j!i. foi apresentedo, e alivale a Iembranca [la conexso com.0 referido tema,

    Ilssa espir:al reproduz a idii]a do que e 0 Ilaskell: 1t1rttl h1~gt~agemdeclar:atroa eniio-seq:ii.enciai. Assim, 0 objetivo , e destacar como 0 Haskell funcione em uma, cone-x a o d!h'et.;l,corn exemplos, Oportunarnente, estae a estrategla de a.prf...'lenti'l_':;a.oos~mlJOIS:: ~~la.:\i t l .e jini f i:O.r: : ,~ sao im,e/b:atamp.t1.f.e 8 ef )~ dd ~$ p or e ." l:e m l1 lo $ ;, e esses exec~l-iados. Essa. trfade de llTIU!I., explicaeao diG conteudo apresentado, sua lrnplementacaoem linhas c&'~jg:oe su'llexeml~''i.o, e 0 argumento paTa jllstific"-'l ' Q titulo deste livro:Ha sk e.l l: u m a aoonla. ,qcm prot iCf~.

    Em g-eral, tais e-xe,~rrp~osAo ora simplesora blsarros, mascom 0 objetivo ded t !3 t a o :: . tl r u r n d~dQ pOrlw. A m~ '~w-e ' . 6

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    16/61

    aSSUTItona seqtiencia. do livrotem 0 ebjetivo de nao sobreearregar 0 leiter comdetalhes que n.ito,1,feteu1 o apeendiaado iniai;'l.l desta Hngu;'l,;gem_ Contudo, aportir do C",.pftu]o 2, este sexto pede ser lido em peralelo.

    ./ Gapit.u~o 7' : A linguagem R!lJSke]]utilize LUll esquema die dedu~ii.Q de tlposde dados ~0 qual e hierarquizado em urn OO,]1("..e~tQ de dr:lJ.i ,se;.s de tipoe. Partede$Sll, h i e l'i ). !' fg _ l r i, 1 .e e . s tu d < L r l < J . neste cap itu lo , h '1 ,jl inguagem na graduacao, Seus resultados podem ser enccnerados em:!http://g,eoci1tie;s.yahoo.c,om.brllpg3udEisc. Ha uma d . 1 S C l l S S ' ' i O sobre pon-too do qne .f . resolver nm pl'ohlema. ver,

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    17/61

    20 HASKELL: Ul\JA ABORDAGEJ>.I PMTICA

    que, a.cada flIn~il.opronnaexistente, 0 leitar lmplemente a sua. propria fl1n~aoequivalente.A ordem dos cari tubs busca apresentar 0 conhecimento focado na conetrueao ime-

    diatn de pl'og~'ama.s, Os detalhes, que eventualrnente poderiam tornar-se confuse aol ei te r, $ 00 r ef er en ci ad o s. En1 murtas partes do l ivro , "']g1U18 C:O~lC:et ta< ;~orevlsltados,ora enteci pados , mas esta l 'epet i~aD de conteudo e proposltal COIn a f i l1i !LJ~.dad!ede tor-nar d."Ll'O O~ detalhes fundamentads da linguagem, Pmticamente todoscosueridcs dosC1ilPltllloo lm'am devldamente experimentsdos e testados em eurso s sobre liuguagensfuncionois, procuronde semprc diwn,ificar '" abordaglll dos exetdcioo ]H'OP08W8.

    Oriient,a~a,opara a Leitura do LiivroA proposte do llv ro e tOl1l00" 0 l ei te r ~ pto c c on fo rt< 1. ve le m um a iuicif~~i!iO deseuvol -ver seus exemplos, sern preclsar conhecer os detalhes .(e san muitosl] que envolvem"ling1.\"gem H f l i8 l o c ll . ES$8 ,. e ~ l ' . , , : d ' , ( l de qu e slguns conteiidos preclssram se r expli-c ad es f( )r~ d e su a. o rd cm . El ltl 'c t. ftn to , e ste s t'apida.s ~ l 1t cc ip ~ o c s f ul '~m d cvi d ar ue nt crefsrsncladas para que os leitorss pudesssm 11"direta_mente em rtente,lles]oc~U1dO-8eptU:ti outras p~-tec do livro, Em ::;entido or.mkirio, ~ Fe.f'ereu(;i~a ULmexeurplo rude.[iol-tambem e referencisdo quando 0 mesmo tiver pertineucia com 00 conteudo apresentado.

    A~urn, ULn~.audeia de como 0 livre pode ser lido e dirigidaa perlis de le u'Gores:/ Pa ra 00 iniciantes ern prog,'ram.~ao: leiarn 05 capftulos na seq] i . iemc:ua d.e apre-senta~ao. Contudo, capltulos 6 e 11 aeonselha-se a Ieitara dos memos qualquermomenta, ou em p.~ralelo . ' 1 . partir do Capitulo .~.Opclonalmeme, 0 C.'!pibdn 8 .,qneepresente os princlpais fonnalismos sobre C I i i J c u l o Lambda. (Lam bda C all-C 1 L l 1 1 . ' ' < ) pode seromiticlo.

    '/' P l:.1 .T aaquelEl!iique ja conheeem

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    18/61

    AgradecilmenltosDe-roe agosto de 2002, quando tornames conhecimento da linguagem Hi!I!ske]l. l l !1111.tOse consfruiu e contrnfmos urn debito de gl'atidiio com vririas P~(),1;;;_ Possivehnentee sta m o s s en do iIljnstos comalgumas que aqui ])00 8aO citades, III filS, [l*1J~1,l ss t ru n b6m ,fica 0 nosso profundo agradccl mento,,f Inleielmence, ~ 11lchel Gagnon 0 (!lMhl 1:10.8 epresentoue lncenti vou ,1 , ~.!8f\11< J!

    linguegcm Haskell, SUf~Suotas de tIUUI"consolida.dM em uma apost.ila [ e l ] ,forani urn marco inieial para conscrucao dsstelivro..,f A Vladimn- Oliveira Di 1 0 0 0 . u o (Umversidede Federal de Vi~sa hlG) que 1103

    cedeu as transparencias de sell C1IU'Wsobre linguagens funcionais, a partir dasql1alg. .1I!daptaII1C1Smnitosexemplos para esta publicacdc .

    .t . A Simon Thompson (University of Kent . UK), P01- terautorizado

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    19/61

    HASKELL: Ul\JA ABORDAGEJ>. I PMTICA

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    20/61

    Capitulo 1

    n"ite capitulo apresenta um contexto da llnguagem ..HAAke]!. Trata-se de uma m.ngni ' lcgem de pl'ogn:nllfJ,~iiopara ] )1 'op6si to . 'l g e r

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    21/61

    30 HASKELL: Ul\JA ABORDAGEJ> .I PMTICA OBSEINAQAO A I1Ot,a~ao utilizada. neste ]ivro e padronrsadapelo~odlgo-foJ]~e d!oprograrua, ~!\l",oern lIm .. rqT~ivl)-t~.x;t.Q qllft . lql l-er ,eem ~e-guida .. sml""E!Cu~io ..on til" des El""I:J;entes do Haskel] "Ill modo iHter-pretado, 0 interpretador mais conhecido e 0 HUGS (Hugs e Winlmgs),o qual esM descrlto na parte A,[ do A[,lendice A, Contudo, OU~l 'OS inter....p 'l 'e w do r- es e e om p il ad o re s para flasl!.eIl e st oo d ie sc l'i to :> Uti p~J:t . .e A. '1 doAp,;md~oo A. A oporacioualidadc de eompilar .;:iutcrpretar 0 cod!igo Has-kell e tembem detalhada na : r e ~ a j ) 14.1, A cod:itlca,,;:iIodos programas C:l'eita em. urn editor de texto qualquer, orientado a ceractere, Os requisttose j,t;; ",n~~~l,b"lm~~~ editOl'8S tilnl~~.m ast.ii.o na parte A.J do Ap~~~diceA,:'''1um ~)(~'tnpl{),edits ~ MI..."o c6d'gQ ,ml um aI'q1JIVO ASCII, tal CU~r1I10'q1J1l.dn.do x : x * ' xC...n e. s'\< ;! p ar a e :< .> e< ;u "i io no i ll t. .e rr r- eta di or e ~~Ii~ ahm~,ij,o OOIIlO.;Main> qtIa.drado 2 :4A execll~aQ e chamada pelo nome (la fultj(ao e OS valeres de se1JSargu-mentes. 0 prom1}t dos interpretadores e dado pela seqiJ;fu1cia Main:> 0'.1Pr"ltlde> ,POlitO> ~> (]!"talh",ja.;""", ....

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    22/61

    CAPITU LO 2 , I\IA'J]EII.IATICA FU NCTIONAL 31

    Figura 2_3- Urn eirculo e sen raio.

    pi =3, 14i59M"Ga__drmlo r = pi .. r .. rExecucao:.MaW ~,a,a.~circ!JJlo 321'1,'27431

    A PJ f~ :me .im f nuGa o e a pi, que 11,&0 apresenta uenhum argumento, wn~eute retomao s e l l v alo r d efi nid c . 3, 1 41 59 '. A f 1 ! l n e ; : a oarea_circulQ C dctinida c o t u 0 srgnmcnto r ,e utiUza o valor cia fu.w:;aor i. para cslculsr a trea do cfreulo.

    Em outre exemplo, 0 volume de um paralelepi!pooo oude hi de tl-W al!'[01mentQ5passados como parametro P1lLl-& uma undca fuw~oo. TaJ. exemplo e dado pela Figura :;:.4.

    Figu! ' ,R 2.4 - )'le:dklas de um p al 'a le le pf po o o .

    o volume paralelepfpedo, come mostra a Figura 2.4;f.:deserito pela fml~5.omate-matka.:

    o volume desS'paralelspfpedo e dHdo pelo produto da hHSB (I) ,Inrgu:r~~(P ) e altura(h), Em. Haskell, est:a llot~AIJ mtJ.~ematica e representada por:

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    23/61

    32 HASKELL: Ul\JA ABORDAGEJ> .I PMTICAt1a.in> 1Io1W1l'8 _parale'lapipedo :3 S :230

    Osexeuiplos ~pres"mtao::los c:o[l5til;m~m a base para a eompreeusao de fl l l l

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    24/61

    CAP ITU LO 2 , I\IA'J]EII.IATICA FU NCTIONAL 33

    0 0 1 1

    Substitnindo a flmgiio "+'; pOl' soma, tem-se:

    Main> ~o~a~3 4 1 3SMain>

    Este concerto de reuse rie fun~es e um dospontos fortes do Haskell. Os conceitos( ) .prc$Cntacl.o l3 nes ta so;;.fw &i '~orcsumidos gndic~m cr.tc na Figura 2,6,

    xSoma x y z

    s o m a x yau:.- /(x ., y) =x+ y ___,...~ x+y+s ..__z -I il:'~.... ~-+--~-~- .."'".y

    Figur 1 . 2 ,6 - Co m po udo funco es par(l ; fo rm er no vas funQOeso reuse de fun9i5espede ser bem Hustrado potr flln~es que calcularn !Il media de

    tl'es e quatro valores, A partir di!l\ideia anterlor, vadas combinacdes podem ser reuti'L.'ipara m~d1,,--3 9,1 S.2 ., ,31L~Main> media._4 9.,1 S,2 ".3 .47.75

    Considere agO'ra 0 problema do calculo cia hipotenusa (h) de urn tdangulo-eetingulo.,dado na Figura 2.,7,

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    25/61

    34 HASKELL: Ul\JA ABORDAGEJ> .I PMTICA

    h

    x

    o valor de h e dado par;Um diegrama funcionelparaesea fOrmula pOIIe ser apFe3entado nil!Figura 2,7, 1 1 " -qual 0 c6cligo Hask e ll e qu i v a le u se PfU"[l e sta f6 rmu .l a e dado po r:

    Main;> bipoteIltl~1l. 34 6775 .1:332150250473~:in>

    2:~3Exercliciio Resolvidoo problema a seguir descreve Q calculo cia distancia entre dois pontes. Os pontesA ( Xl j ~11) e 1 9 (X2> Y 2 ) definem urna reta.

    Detinlda ~ i1i,m~f,ngenJ WI, reta PM"~)0 c1.1culod~ distilnd ~ entre dois pontes,sa o mostrades particularldadss da fu ru :i io , q ue - o e orrem d ev id o ~tdisposh~1i"oda reteparalela aum

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    26/61

    CAPITU LO 2 . I\IA'J]EII.IATICA FU NCTIONAL 35

    -:"I -41 -J-2 -~ I i2 J; 4-.~1 _ 2I _ J1 _ < 1I _ I iI

    Figura 2.8 - Reta pauille]a ao eixo y.

    Em Haskell, ocodigo dests fun~ao e praticameneeJdectico a fonnula~!i.o mate-m.atica:-- Toda 1 inJilil. al ii Haskell !. 9 to: itL03ii tada a :p

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    27/61

    36 HASKELL: Ul\JA ABORDAGEJ> .I PMTICA

    123~~:t-H,;I! x2

    -~

    Figura 2,9 - Reta paralela tW eixo x.

    Em H~keU,. 0 o;:m.~:utQ desta fum"w Ii i escrito da uiesma maneira:

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    28/61

    CAP ITU LO 2 , I\IA'J]EII.IATICA FU NCTIONAL 37

    d~B = d 3 t e + 4 e~B = (X 2 - x I l2 + (!Ill - !n)2

    , t . < l : i : 1 = V ( x ~ - xSl -I - (Ill -vd'iA partir dessa defin1"iiiomatematica do problema, uma parte do codigo ja . foi

    apresentada. Assim, 0 problema pOl ' complete ereescl'ito pm' uma unlca fUTI'i3.0, aqual e dada pOT:! i _AE ! I1 y1 );2 y2 Ii =t2 = aoIbs (y2 -y1) -- Coiidi~:5.D 1

    yl =y2 = a~s (x2-xl) -- CC)D,< i i . . io 2Qit:il'l~",:i".;! = ~1; ( (l::::l:-1:U~~+ {y~-ylY',;l ) --C'@di~~Q a

    M a i n > d_AB 1 2 1 5 :24 ! . OMaiD;> d~AB 1 3 :l 4LDMain> d_.!B 1 2: 5 sS . O

    Esta fun~ao possui quatro argument os, x1,yl, )[2, e y:2, que representam os doisP0l1003 A e B n o e 3p~ c: a : rt e su a [ lo bidimensional. Neste codigo, 11 ! fU J1 9 i o d_AB fa z 115 0'das fUIl~Oes aDS e sqr t., as quais estao definidas na bibliobecaPrelude, hs do Ha.skell.Esta biblicteca contem varias fnngDes iblkicas, aJ~n deser earregada automatieamentepOl"default, em qualquer interpretador Haskell.

    Ii! OBSmWACAO I I i i ! Iiium novo "lImholo neste (iltimo cM~go: ~11".Es~~s,'n,bolo " cOI~.Lh. ddo COf"O Y""""daa, " ~"pr,.OllOllL" dn fun~iID" ~"1lS "'rgIl'-mentes de uma parte condicional a execucao docorpo cia rlll~M, Isto , e ,apes t~ma gusrda "I", lut uma rolldi~a.o lOgica a serverificeda, CMO esta~ondi~ii.o tenha uma t'e!'lIl'05t,fI,~ogi.:;a verd~l.dha. a p~l'te ~g1.lil1te ao sine]00 "=" ,; exccutado, Caso a,cG:ndi.;;io logica se]a [aIlsa, unia pr6rima. condi-clonal, dade. pela gJIilardasubsequente, ~test.ada, eassim sucessivamente.Esta estruture com guardas na fmil~aod_.ABtern urna analogia direte, romI;lE estruturas :id-thi3([1j" GaSi3 da i~mgnll.mto:;'ill:Jump

    1. l

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    29/61

    38 HASKELL: Ul\JA ABORDAGEJ> .I PMTICA

    (j, Escrever duas funcoes, x_lIIai.or que retome 0 maier e K_m:TIo:r que retomemanor valor real, dasraii'ze::; de uma equacao do 2!;! gran, A expressso genericae dad~1per:

    -b jll- - 4=2a

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    30/61

    Capitulo 3um a Visio I F u ln c io n a l1 d la Ilndllu~io,Il'lte cl\pitnlo trat a de urn problema eomum ao uso de HIlla Ih~g\lagemlillncional: (I pm-{Jk;,UI a ~cti~~vidadt- Avisi'i.o via i;vl t~9O;O tn,(ltem6ti im , . p tI J. -t I) resolver (I pl"obl

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    31/61

    .:Li.v.ro_baake1l1_;llOVateo. -- 2006/10/101' -- 14: 0)101'- page 40 -- #40

    40 HASKELL: Ul\JA ABORDAGEJ>. I PMTICA

    1 + 2 + a + 1 1 + ...+n60TlW 1 ['-...-'tl"Dl'na 2 (soma 1) + 2soma 3 .(smna 2) + 3so :ma l

    Com o se observa, hat"lilHI. sonia l'epetiUvlil. entre o uMimo uumero ccm 81 somaacumulada ate 0 uinnero an~ec:estiOl', Seudo assim, aiil tima linha descrita e a genera-LizaciW da" fUlI( ;M 8otna , lit qual .~ a f'i\(!m ~ndtd~'I;'ll:gcml, dada p01";

    SDma n =sama {n- 1) + !l.Tendoo p ro b lG nll: l g :l IG I'H liz Rd o., h l IS l.a d '-l: .S C1'8 'V e r a te rra me uto , o n s eja a 1.11t i .ma

    tJ ~ao d J'J .flm t;;i lo so m a, q ue, no C(Il50, e ~l," ,"o .n;a 1. Ern. seguida , hastn adiclonar ~ ultim~l inin. d o pro blem a (f~I inha gGuen~iz8ICb), po ls G&39 .00 oncarrega r ( lCll , tn ; : iw~rne :nt . eeresolvero problema. Neste csso 0 c&ligo fica descrlto como;am"o. 1. 1aoma n = aCJIlOILn-!" + n

    MaiIV SOIi80 . 4,~OMain> " ' 0 " ' ' ' ' :23

    Considerando a formula generica do Ca:50 em. questjio deterrnina-se quem e o aWF-ramento 01 1 termoinicial do p l 'OCeS50 induti 1'0, e em segnida tradnz 0 codigo matema~t~.oona notl!i~~()do Haskell, Pasa compreender como 0 interpretador l:hsl~eU executatal a6r]igo, e Ielta uma es(}(u[aria . ria ' f 'eCfu'siuidaa.e. [1 L qlle representa as sucessivasclramadas recursivas que !h linguagem Haskell realiza, dada por:: smna 4

    (~QIIj

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    32/61

    .:Li.v.ro_baake1l1_;llOVateo. -- 2006/10/101' -- 14: 0)101'- page 41L -- #41

    CAPITULO 3. Uk']'&" V]sAO FUN ClONAL DA [NDUqAO 411Agora, (I iuterpretador resolve 0 problema da priorldade com base nos pa:J.'enteses,

    que, neste Ci'I!OO, e a soma dos rurmeros:(((l) + 2) + 3} 4- 4(3) + 3)+ 4(6) + 4; 1 , 0No retorno dID chemada, 05 elementos anteriores sao visi .h.d!05 a partir da regra

    g e :r aJ . ,. em que 0 o b jE !to n p os su i mnare]aQao ad 8!Uanteoessor (n-O, C~IE!gat~J() ,assim,ao resultado esperado 10.

    3.2.1 FaloriiialUm exernplo .l 'I .cnalogo ao::m:~jor e 0f!iltor~al de um mimero :UlIteuro,. A exemp]o dasoma dos I1Uu.teUl'D5, para 0 caso do fatQ:r~.al dado pOi.':

    f(d{)d(~! 1l o O J: 1 :e : 2 0 1: 3 * ' .: 1 01 : . .. _ . e: 1~jaturiu.l 0 ~fM;orial 1 (jafor!,a! 0) * ' [. . . .-".---jaiorial 2 {jalori;al li} > F 2latodcrl 3 (jaiQrkd 2 ) * 3jatoriul 4 L ~fatori(!l 3) * 4

    f a:todal n (f atol"ia.l{ n - 1}) n

    Sob ULna definicao mafematica, 0' mimeeo fatorial de um inteirc e iuduti vamentedado pOi':

    f . l() { 1lli;.ona n. = ,.. jlJtonal(n - 1) 0+ : no fatorial e 0 numero corrente umltiplicado pelo fatorial do seu antecessol'. Assim

    como 'I) apresentado nal riltima linha do problema a genel.'a~.tza~aD 6 c , 1 , . ;f at()T'ial n =ataria! (n - 1) > F n

    Ao dcduzir .~f6rmula gcncrallsadora do hwlti~u,C IlCCCSSMIO definiro arcrrtencntcpara 0 caw do fatorial, S ab e- :s ! q UE ! fatorial(O) = 1 , Em .segn~da, a linha fa -torial(O)=l e adicionade. antes da f(j;nmub g'"meralizadon~ fatorial D. = f'

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    33/61

    42 HASKELL: Ul\JA ABORDAGEJ>. I PMTICAfatorial 0 = 1fatorial n = fatorial (I'L-i) ,. nExecm;~:Mam;. fator 1,111 :2:;]Main) fat.or iLal 5120

    A escadaria a a recT~'l ';sivi ,dade.da fun~o fatoll:' ial segue a. mesma 16glca cia fU[I(jiiosema, t.al] como:fatod.a1 5(f;'l.'t.orlal 4) '" 5(Uatol";i,~] :3.) . . < I l . ) , . ~({{fator:iLal : 2 ) , . 3} ;, - 9 , ) * 5({fat.arial 1. ) *:0 ,. 3) .. 4) * SEfetivamente, o calculo e e:xpresso em simbolos, tais 001110: fatorial 4, :fator:iial 3,

    ... , at.f. i.a.-tori:!!.l 1. () c.i.lculo numerleo e realizado segnindo a ordern implfdta dospal'enteses, nao exiatindo nenhuma Dutra pendencia de SI11Ihdos na expressiio. Assim,a Im!ul t ipl ica9; ; 'O entre C IS rnrmeros no calculo de fail:oriaiL 5f. dado p O l ' :

    ( (( (1 ) ,.2) ~ 3) ,.4 ) ,.&( (2) ,. 3) '" 4) .. 5

    II ((6) [~4) O Il 5(24) * 5120Finahnenre, o resultado esperado e 120,0qu;a~e obtidc "'P08 sucessivas 8ubs!l:ituJ-

    gOesde simholos pc)}numeros, e aofinal opel'a"!' apenas com mlmeros, Este conoeitoe c o nh ee id o c om o (1 .9 J (l Ji (~ 9 ('i ,o l )? ~ eg td {'o s( ~ - e ( ; retomodo U~~se< ;1 i .o3 .5 .3.2..2 Fibons.cciOs mimeros die :F~onacci sao definidos da seguiute forma: 0 primeiro e 1, 0 segundotambem e 1;.0 n-ffiinlO 111~me!"() dennklo oorno a soma dos doj,~.mimerosanterlores.So b uma definiqao maternatica, 0 mimero Fibonacci e induti vamente dado POl':{ ()Jib(n} = 1Jib(n - i) + fib(n - 2) n=OTl =n>li

    Quru e : : I e fu.n"ao que CaJ.Cll~!I.0 u-esrsno nfunero de Fibonacci? Umaalternativa e programar a flU~"iodiemodo recursive. A implementacao e trivial e existe tunatm,du~ii.o direta da defini~ii.o dos numeros de Pibonacci:fib" Qfibh b!+ :;IO!!l''' Uit. (]l-D) Chib (1+-:4))

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    34/61

    CAPITULO 3. U/!,]A V]sAO FUNClONAL DA [NDUqAO 413Execm;ao:dn> .fib 7saMai:,,) fib 82 . iM a i n > fi b 934

    Cadaves que a ful1~!i,ofibe chamMa,ID dimeneao do problema sereduz ern urnaunidsde (de II.pan~ n-n mas ~au [ e u i : : u ; JLt~ cltarnadas l"&:lIl":s :LV::I5. btu da odgew ""umaexplosso no munero dechamedes S(Jbl'eela propria, em

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    35/61

    44 HASKELL: Ul\JA ABORDAGEJ> .I PMT ICAmullt_7 4, (Imult 7 1 (ImuU 7 '7 1II!\l,U 7" 1 + mnl;t "/ (; mlllt_7 182Ma;i,n> oolt_7 : . : l . ~:3Main> mult_7 3o

    A ordem dos aterramentos na huu~:ii.omult_7 nao tem impoenancia. C!IS{)sejacolocado mn e apeni!ls um Jog aterrameutos dep ois ita funcao recursi va, gera], em. al-gnma. =It!i['liLQ_7 a~[iain> muH:ilpllo_7' H i

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    36/61

    CAPITULO 3. U/!,]A V]sAO FUNClONAL DA [NDUqAO 4152Main> 1 iLW . t: i. p. ll o_ 7 1 3

    N o prim eiro exem plo , no qm d 0 utel ' l 'ooncnw l!iultiplo_1:4 = 0 e c olo ca do d e-pols d J : L W u l l C : ; :a o recursl ;'8" geraJ ltIult i . p l 0 _ 7 ;J: = 1 . o f rn.ult ipll.o_7 (x-7) , a flll1=1) ~Il; (;.;; mult:iL r 7010.MaW m.uH.I._7 1oMain> multi_;' 4cMaW mult:Li' i'~

    Uma g~lmTl.!e 1_mll~oondi~ii .QlogiC("~ a ser verdadcira, Pf!1.f~que .~dcfllii~f~ocia fiJu~aoseja executada, Caso esta cO ]l dk o o lOg ic ~ u ao seja verdadeirs, aproxirna. gnardR e -ye.lil'h:ad,ta. N Ii. f iL I ll ~iW 1 n 11 1tL 7 a c:ouJk,ao ap~kadji. e (x>= 1) M (1::

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    37/61

    46 HASKELL: Ul\JA ABORDAGEJ>. I PMTICAs a o diferenclados pOI' algnm valoe entre 1e 7 imas que, ao final, COIn aintroducao dasgjlUfY].(.Is., a p,;:vl'F.e condieional da fl ln ~i 'i .o ,e: st. a fi eo u bastante resumida em SH,a, nDt~.' iD_A mrhivd x 1l~1, fun~8.o~ulh_7 kz um C(l8(~mcn;t(l cendiclonal com V~-W:0'1 'CS de 1 a 6,retemaeido 0, erl:Cjfuanto,pal'a os demais valores, recursivamente regue-,se na bnsca demo.is mldhp~os de 7_

    Uuia pergunta: e s~( ~( lu : y)UOO9ii () d e U r rh a s de c6 J' if lo tm J .c ri a SC9 ' ,ctr i tada? A respostae ~im, e 0 conceito para o;!t;ta eqlli va~en(;b e o de ca.sa'merdo dt:padnio, Em urn

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    38/61

    .:Li.v.ro_baaka1l1_;llOVateo. -- 2 006/10/101' -- 14 : 0)101'- paga -'If -- #4[

    CAPITULO 3. Uk']'&" V]sAO FUN ClONAL DA [NDUqAO 417t1a.in> h . 17 8 g20M a i n > h 1'7 18 9:;10Main> h 17 18 HIoM a i n

    A 8$~ m , ~ fU n< ;: 30 ativada e execntada e aquela qu e se aju ataecm urn doe pedroesliOf~gumclito, mas scm considcrar 0 contcudo quando {Iargnmcnto fo r ";". O s iden-tificadorss sa o viueulados MS vslores idelltlf iC8Idos para avaliw;fu.. do lade direlto da'eqtJ'W;~l>.

    08 padroes pennitidos 800 ccnstautes, t~~~somo lnteiros, vaJN\~S booleanos, tu-plus, nomes de pa:ra:metn}l; Iorruuis, etc, O~ IKwroes nao-penn:utidos & 1 . u expn~:ii:joe~aritmeticas, relacionais au 16g:ica;s, Os nornes dos identificadores devem ser diferentes.Alguns outros exemplos desses d.efilliqCies sao dadas pm':: i g u a i B : : i n t - ; . l I l t -> Bool:iguai s x x T1tttel.gu.:..h II 'J Fal"eEl.R!!O va:riavall repat ida am padrao I!!'! (Iilepea ted variable "x" ill pEl.ter.n.)

    ~guai3 : = : ! ! ' ! : t -> bt -> Baal:ilguads x y x ,= = y =T.ueigu:ais x '1 falsQ

    Aqui U U l "_"pode ser usado quando um valor l W . O interessa pars a W . J l i~ ; f ~ . , POl'exeuiplo, a . d e : : f i l l h ; : a o do operador Jogico oil.(or);au '" .1 1< > 1> 1 _ .) Bool -> . 1 1 0 0 1011 [,,,lse P",lsa F"l,~,,,aU = TrtI-e

    N este c aso , so m entc q uand o M variaveis pa_sSldus co m o pm i_ m etro fo rem Fabe, 0resultadoe F....;!,!:;e-Em ( j ]1,1alql ,1eroutre caso, a, vnrifwel < ln on im '~ "_ " assume 0 resultado''[r~e,

    A Iinguagem Haskell utilisa uma estrategia na avalia.;ii.() das fun~6e.'l denominada,ava.lia~a:Q pT'~gtji~DSa ( la2y eualua !ion,), cujo fundamento e qu.e H a D se avalia nenhumasubexpressjio em fow;."io at.t!:q~l!e sen valor reja reconheci rio como nece; ; : ; ; ,1. \do. . Esteconceito e i~udrooo polo exemplo C 1 , sogul r :o . o o r o , t r i p l o ; ; lIlt -> I f i tI!lelJQJ1, f,; lilt -]> lilt ->Intm13nor .x y

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    39/61

    48 HASKELL: Ul\JA ABORDAGEJ>. I PMTICAT o < :; y = x.Dth8lr'~i5e y

    g o! ;> :; r; Q ) ,; = ;til- ;J;triplo x ,= .3 *xtab (d()bro (triph) (litlillor a b) ) )

    f 9 8 = (dobro (triplo (meno.r 9 6)))ttl:' iplQ (I!,;mw '" S)) + (1;1: ' ;i,plo (!!I!enor ~ 8))(3 * {lIlel1i.o:rr 9 :8) + (triplo (me\nOl1!:9 8)(3 .., (1Il

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    40/61

    CAPITULO 3. U/!,]A V]sAO FUNClONAL DA [NDUqAO 4 W

    1, Calcular a soma entre dois numeros nl e n~~incluindo e excluindo os limites,2. Dados dols mimeros n1 e ?l2" encontrar os ml'iltip~Ode 1 1 > 3 que seeneontramnesse Intervale.3" Udlb:audo a f l .1Il

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    41/61

    5 0 HASKELL: Ul\JA ABORDAGEJ> .I PMTICA9, Construe umafuncdo que calcule a ralz quadrada inceira de um mlmel'o intelro.

    Inrplemente mna fungio que, ;'\ partir de um mimero forneeido pelo usuririo,ealcnle 0 "'~or inteiro.Exe!Dplo:M a i n; > r a: i ! z 6 5

    B

    10, Construa a fmlO;au de Ackermann, fi e qual e definidla. po:r:I. (({rn, TI.) = 1 Ide '1'11 = 02. a.(m, n} =a;{m - 1,1) se Tn fOe n =03. , a(m, n} = Q ,{m - I, a:(m, n - i)) se m fOe n t{)El:altlplo;Main) ackcr (2, 2)7

    11. Construa uma firn~.'iDque retorne 0 ~Ja : ! f imo D~ViSOl Comnm entre doss nsimerosiuteiros, e, eN,Ocontraric, retorno O.

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    42/61

    Capitulo 4' T u l l p l a sEste capitulo trata 00bre funcoes qlle mauioulsm l]m ccniunto de dados het .arogenoosde modo encopsulado. Ted conjunto betercgeaeo de dados reprcsento 1JI:n

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    43/61

    52 HASKELL: Ul\JA ABORDAGEJ>. I PMTICA12. campoF'ernaIi lc lot.I JStrin,s

    18~I n t65.23. I J .float

    Tenis~St.rii..llgo prlrneiro campo desta tup~~v-4e ume String- Esse tipo de dadose uma IiSt.fillde c m " ( ( . C t e r e ; s ,

    IIOBSERVAQAO ! I I ! 0 tipo5t;r;i,ng e definido como usn coniunto S!eqlien-chILId.:.caracteres textuais da tabcla ASCII, tal como m:[}~p.....flI.Vlt . 1 . , frase,etc, Esse tipo de dado e apresentadc na se~ao 5.G, onde 0mesmo e definidocomo uma lista ou s.eqi:h~ndade eeraeteres,

    o segundo campo" destiuado a idade, e do tipo iuteiro, No tereeiro campo, urnvalor reel on de ponte flutnaute, para 0 caso de um conteudo como peso de umapessoa.

    A pri ncipal apli C:lI~ i\o dns tuplas e o defini!' l\ITi)'J. f11I1 and (5, ~bo", dia")~bOlIl 4ia"

    Aid tupltu:; com um mimero maier de elementos podem ser definidas com trb,quatro, cinco ou ate n elementos, Umil! tripla, Ul1!l1lJ quadruple podem 5eJ.- defiuidasrespecnivauiente pm:PI"C'llu!.ilp (1.2.::1)(1,2.3)Prelude> (1,2,3,4)(1,2,3,4)

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    44/61

    CAPITULO 6, TIPOS DE DAnos 005Prelude> 3+3>14~4P .- e :! ;l .! de > ; ;; :I : ; I , * 4,2."66&66666600667Prdudc> (2 ( 3) ~ 42.66 006 6 6 6 6 6 6 6 6 7! '!: e:! ;l. ld ,e > ( .. ) {(!) ;;;:;;I} 4,2 ,6666666666115667

    Operadolres IRelacionai i isApos 1: 1 apresentacso dos muneres inteiros e dos b ooleanos, , e possivel d.efinh" rompreeisiio os operadoreerelaciouals. Esses operadores retornarn uma saida Clotipc~ool (J3ooleiU' lO), df~Clito.~na Tabela 6.3.

    Tabela 6.3 - Operadores relacionais.

    ). kIalOl' do 3). 2 Trme, ( 3 : 3 - Falls!que

    >= J l Ja io l ' e 3 >= :2 = True, (>=) 3 J = Trueiguel a< : 1\Ie!Hll' [In 3 < : :2 . . False, o o 3 3 - falseque, , - kI 'E:nm' e 3

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    45/61

    ~l'4 HASKELL: Ul\JA ABORDAGEJ>. I PMTICA OBSEINAQAO Urn erro comnm, e trl:'!:U\rquea e 'a' como ]gl]lUs.'E;K~!'rt~um~ difer~n"a ~l1~,t"e~mbo~, poh a pod..e ~ev 0 nome de mna~un"iioon de urn.. w>Ir""v.,~,.. 'a' .. un, e"l'acter Ht..r..ldo t;po Char_Do mesmo modo, 0 mimero deve set escrito 001110 ';3', para Culle seja vistocomo caractere; case eontrarlo etl'atailo como urn ndrnero.

    Pan, trabalhar rum ceracteres ufilizado-se o valor nurnerico da tabda ASCI[ ouo pr-oprio caractere, Para. tanto, e necessario conhecer 05 valores da tabela ASCH.Mas, felizmente n . a o e precise que se memorizem os valores, 0111 que se flflJ"auma tabelapam. consulta. !Para tanto, 1 1 . 1 biblio1tecalChar, hspossui duas fUllr.iie.s definidas para 11 .OOIll. IrrtA fUH(,!ao c o uv erte o c :: w. 'l c te l'e pa ra I::!U respectivo va]ot num erico ua tabelSl ASe-H .Ilxeinplo:PNlludc> ord ' a>97

    chI" Int -> Char

    Corn estas duas fun ord ~a..,- om '!'32P l " e l w i e > or d '1;>' - Q i r d I 'II'32

    AD utillaar a, fum;ao erdpara O~ valores eorrespondentes na t ;% b e & a ASCII de ;.at;o .t c i .~ ' s o o devolvidos 00 valores 97 ate 122, respectivemente. Anal(lg!l.~nente, de,A' ate 'Z' sao retornados os valores de -5S 11. 9OrespecUvamente. emil base nestadi Je l' el . lt ; ;. 'I I, a s let.), '&.

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    46/61

    CAPITULO 6. TIPOS DE DAnos 9-5Entao, fUlles que transfonnem letras mimiseulas em nuJ(iSC1l1~aS,e () cQ11itl"al' io,

    sio dadas POl ' :

    t;j:i.tIntdi:f = crd 'a' _,ard "It' 32m a il l l C 5 c MiI! Char -:>Charma ll ll minU8,G_Mai j < : I , I'A'M milll,l~G _ M A i , '11',( ',MaW

    Propositadamentealguns resultados acoutecem, As f U T I < ; 5 e 5 apeesentadas s a o sim-ples e sem nenhuma restricao sobre suas entradas, Assim, ao se digital' certos caracte-res, Q programa executa a fun~iio como for possivel, eventualrnente ocasionando erros,No ease d,11 uma, entrada. COlnO ' z' j!i eI';!I. llII1.Cm ,'I!C1T.ere mim'is:1l1o, tendo ocorrido II.eonverseo alem do ultuno CUlr8.ctere v:\lido, que e nll ,81tetra ' :z' ,

    Fan!. resolver esta dHklllda,rle; 0 1].. = 'a" Mx < = 'z' = , minu8D_Mai I1: >.. ' A ' M : : r :

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    47/61

    g6 HASKELL: Ul\JA ABORDAGEJ>. I PMTICA

    Desc:l"i~ao I ExempLos!Plln~ao que retorria verdadecaso 0 caractere dig[ tado formimiscu]o, do c(mtl'i1rio re-toma i...so,

    .isLolii'r ; Il.' ..TruB :i L s LOW8 r 'A'..False

    : i .5. lJIpper !Plln~ao que retoma verdedecaso 0 caractere digi tado f o , ] 'maiusculo, do cOlutr;RIl1JCI re-rorna ~1,ls()_

    i sUppe r 'a' =False i:;:Uppe;r ;Aj Tru@

    ractere, e 0 converte em um ' a 'caractere minusculo equiva-lente.

    toLower ' A '

    toUpper f ' l1W ;ao q ue nacebe umcerse- tOUppertere, ~oun verte 0 mesmo ern 'A 'um caractere maiusculo equi-valeute,

    ] a.~

    Verifiea 6'C 0earacterc I: um eli-gito {de '0' a '9 > entre aspessimples).

    i G D i g i . t ' 1 ' =Irille isDliglit' a'False

    digitl'olnt '.~i[ r l u l l o com ..~ t . .Lfll~~completer 0 coujuuto numerico em Haskell. f~ll'

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    48/61

    138 HASKELL:mIA A80RDAG8:'1I PRAnCASej.iB.,mAI e N ).-tennos e x uma variavel. A substltuicao das oeorrenclas livres de .x

    em Al pOl' N [representada por M [ x - - N]) e urna ope!.,.'Lt1ii.oom nialcr precedencia,[lo is se tru tn de um a "[ll iC t,l ,x~ ~ ( ),e tam bem ~o ci t'l> tivfI>1 . esquerde, seudo definiderecursivamente 11pOl':

    zl x UI~;!ic>_

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    49/61

    "~i'l,i':ro_h'1.o;ken_;naVi'l.t.ec" 2006/10/9 - 14:49 - page 13f) - #139

    CAPITULO 8, LAk]BDA CAILCULO 139

    g I = 1: I (f.atoriaol x)F~m evitar Ul1.1'~decIHJ.I)~50 d1). l i lHQiio!!: , ebstral-se ~l.mesma, e, como resultudoobtcm-sc ume flnstU.l-t;fliO ool6ni)i l l '~~

    \x -> 1: : j Uatori1l!1 x)Ex e ( . ! \ . l r , ; u . ( ) :Main ;> g To .00136S6SaaaaSSaS9Main> (\x-> x I (fat.ori;lix)) 7O.00136aMa8~698ea9

    Observaqoes:1, A sintaxe eqnivalente para 0 simbolo ), em Haskell e UIJ!"l.& barra invertida "\'\pols e Q sinal de urn teclado convencicnal, que mais se aproxima ao simbolc A_Assirn, uma expressao qua~qnel", como ),W e reeserita em Haskellcomo \ T i l -2. 0- separador ~'." do .\-cilcilio foi substitufdopelo aplieador ~'_'~110 Has.kell,queindica qual vaJ.i6.vel e para set aplicada so b umargumento a sua direita. Nocaso do example, Ioi 0 7,

    Logo, itexpret;::;.twg ~ representade. em teruios do A-cakulll, at~llginJ.o t1 tmru.pu-Tellcia 7"t;frwcia~ que e uma das principaiaideias a ser alceneada 11M linguagens depmgl'liUUa;;ao ,

    E~uUI1:l. eegundcexemplo, seja Ulna, abstra0~o-)" dennjda pOI: ")"x, ~x + l}'"equj-valense AX . {( +) z J] = AX . ( +) xl , [;g~l.a>bstra~ao em Haskell e dada po]':in c = \x -> (+) K 1Exccu~f"o:M ill.~ 9HI.MaW (\x~) (+) x 1) [;I~QMai,,;'

    1. inc : f\mdi.o identtficadora inc definida POl' um .., soms;2, \ : 0 : : -> : a abrtn.

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    50/61

    140 HASKELL: mIA A80RDAG8:'1I PRAnCA

    1" 0 Haskell dispce de urn mecandsmo de tipos que disclpline a be ,apfictl~d() dasfnnqi'ie.o;;aos seus argumeruos.2, Como linguagem de pmgl"acrna.: ;oo modema, 0 Haskell dispce de mecauismoeque n ao . s ao enCQI]!tl'MOS no .\-dlculo (por exemplo: casameuto de padrdes,recurxividade explidt.a\ com 0 uso do do, ,;,[!ere, let; etc.].

    1 E . . x .e m p lo d e o-redex:Main> (\y -) (+) y 1) 9,99;9liO.999Ma:iw {\x -~ (+) 7::1)9 ,999tQ.9!J'!;I

    Em um segundo cxcmplo, l'tm\:io aprcscnte uuia particulerldadc do o-rcdcx, pois 0:t iute11.10n a o & substitmdo na lxrimdm redu~a.o por estar pwwgidopelo x euvol vente,Ou t;eja., < J . . oeorrencie, inberna de x nao e livre l1U oorpu (Ill.IlJ;)Sh\ll~ao x extema:Ma:iD? (\x -;. ( \x -> (*) ( (-) x 1)) x 2,345)n.zai 9.676

    Utilizando . 1 . . U[lguagemHaskell para r~llSt.ri'lIl a aplica~.ki, de 111111. .flln~.:ao Iiurn argn-mente, que neste ('1);;:0 e apllear urna expressoo (\); - > x + 1) n, } oonstante 3, el1t. ito:( \: :r - x + :1 ) 3" 0 p"ocesso de calculo e detalhado como:( \~ -> x + 1) 3 =) (+1 3 1 =) 4

    ApQ~ 0 t }Kemp lo ,nca clare o '1l1e Cl!mnt,,(equando se (l.p~ka a fml ; ;~O (I. u rn , .r g1 ,1 -mente, obtcndo-sc um l'CSUh,f~O pela sulj$f, i t"U~;~aona CXPl'cssli.o (+ ) x 1, d(. vsr lavclx per 3.

    Em HMkcU h~'~um procedhncuto auiilogo:Mai:,, :> (\k -" (\;>:- > - :.:".1 ( \k -> \x -> :Ck ) 50 232

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    51/61

    CAP ITU LO 8 . LAk]BDA CAILCU LO 14m

    A seguir uma analogia d!a regr;!!, lJ"redex do A-dlcll~D com a linguagem Haskell:P(~elud.e> (\x-> (+) 1 x ) oJ .5I ) " e l u d e > ( (+) 1 ) 45

    8.8.1 E xem:p ~o d ie Teste die!LlberdadeEm U lna pliit1ca win a l i. ngUag .i ll l H a ." ,k e11 , ! c I ej a t i :Uu , ! -Ul'K,;aO q ll .e t< :! st a s a um av er ia ve l e ]ivl'e 0 1 1 . 1 se e ~ugad!a , 0 prirneiro pasoo e a Fepn~sent1lA"iOOda expreesso-A defluide 1 1 ! 1 .se~!io 8 .4 , implementada p el a d efi ni Ce_ou_lig&da :t 1~b_2b; /= illt V8i;I;:') &:.t;(llillHl'_Ou_1isacla x 1a!11lb)iFal.seiv.re_oll_Hgada.

    Sej~1.malgumas e-XPl'B&dSes-A 001:110 "'(Ax. 1/ ) ( X ) " , "he) (Ax. : iJ )" , "(;d (Ay. !I)~ e-"{AX. x} (A y ..y)", a execuqao desses exe:mplosl:'l e dada POl':'"'Varios desses parente5e8 podeeiam ser omitides, faram manttdos par qne.;;tf>e3de legihilidade.

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    52/61

    164 HASKELL: mIA A80RDAG8:'1I PRAnCA

    Assim, as funes vistas ate aqui sao as mesmas, a unica diferenca e qJue slio apll-cadas sobre urn novo tlpo de entrada: 1~m4figum. Assim, uma, ngm.'; ' \ e representadaper 1_IJ11~hsta bidtmenslonel de caractcres. como POl" exemplo:losango = [~., II"" . " ,

    '" . ,.:j;I :# #., ,',' ' ' . , . # ## #: 1 ;1 . . ,III ~ ~ _ 'j#~ _~~II ~fi" , 1 1 " "o J

    o tipo desta rn1l,t.riz e de vi['jru;H~t.ll'de oaraoteres, 011 . '1e jl il , [3ering], [[Cha.r] ] emmna lista do tipo String, assim lo sa .I1go :: I[String] O il 1 1. 0samgo:: [ [Char] ] .Em resnmcl;, basicamente as flm~6e!1 generalizadoras vistas no Capitulo g'siioi'l,plic'1lassob este tipo de dados,

    11O~2Fun~6es, sob Figlu ras de CalracteresN os priu ieiro s ano s esco lares, t U J . < . J 5 a pre nd erno aU t lC be tl ', pela IHeo lor iu .GOO J . < : : obje -too, como e G o CMO dasvcgads 'a', 'e', 'i'" '0' '11', Com a uniso de algumaevogeis econsoant.es, tem-se a fOl'Illacoiio de palevras, tal;:; como Haske]), Logo, a rnanipula ..iiodesses 0)bjetos e Jeita coni fUl1o;f jes que trabalham C

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    53/61

    "~ i'l , i ':ro _ h '1.< ;ken_ ;naV i'l . t.ec" 2 006/10/9 - 14 :49 - page 165 - #165

    CAP ITU LO 10, FIGU RAS'I'EX ,][,OS 16 .5[9',8,7, 6,5,.4, 3]Hain> invertEl_ 1 " .,. . Ij! .# i l i i n"'#11## .. , ,.M< .~ n ) i ! ;! v eaval,e[~ ..... , " . ltll .. ,~," ... , . ;lNI... It. '!!, ~., .'~:II..... It., "'".11" . , " . . "#'.",I~ .. .; It ~;;~# ;; .; I, 1 f , : ~ II . .. '" ~ , ,~: ; " :jltl# ,,:j I ~ II # ~ I, ;; # ; ;. ;~:I:.; II I ~ 'n" . : 1 \1 : ; ; i I : I = ; ; I, . . n JJi~~~ " f f, I, . # : . I ~~ ii ~ I ii ~ I ~ :W ,j, ~ I iii~ ii I, I, ,j,j~~~ iii~ 'Ii" ~ " i U ! # ' I, i l ]1M!l.in:>

    Utilizaudo diretamente a fl l l l~M caval.o ~10 H8ISke]l , obtem-se urn lest\~tlJi t ;1.onadaagl l : . l .d . : : .hre l .Na d e - f i l 1 i ( _ ; :M d::tJ f lL l Il l, :Mc av aJ .o , a a Iinhas e"tao d iBpo ot~ urna so b a o utrasendo dificil identificara 6gu:r.a. J a ucilizaudo uma flin~i{)pal'a imprimir cada ele-uieuto dessa matriz, as quais ~W linhas de caracteres, . 1 l ! S liuhes devern ser impressesuma a uma. Ao final de cads, Iiuha ou elemento da matriz, deve-se "altar de ~unha,para, em. seguida, nuprimina proxima hull a em. questjio, Deese modo, HUla figl.1l"!I.qualquer possa ser identificada, Para que a figura da. cabeea da cavalo seji'll visivel, e

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    54/61

    "~i'l,i':ro_h'1.

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    55/61

    250 HASKELL:mIA A80RDAG8:'1I PRAnCAP,u.~ controlar quul n6 ja fni viaitadc, e criudu IJULlL.listlt de ntia ~iHitado~.3, uqual guu,m]lt

    a c(}:nrtguj"a.~ d~ todos os .!i6s jil. v~s.iI..'"dos!i>:plurr,Idas, A nmQilD bUSG~ ItOC6dl~.-ofa,... tim,"!,expk'Hi!.S contetidos sao i1ea,]izado8 OOIn 818 f un o ;: o es utilizadas dio~ I: < pu t, lt lo 11. p iI J. '( I. '0 -l;ua..io como Ul~1pa~.ii..m~tropM'a uma, mat!tz. Ou seja, ffl2 uso c i a [u rn , ;; a .o H,&'~.!h~lt~.yue r~aUza tal conwr:sJLO.

    A seguir, e apresentedo 0 o o d i g < : > - lonte complete do prcgrema que resolve 0 problema dio"f""bnl~ c"h [Int]liata (a,b"G) = ap a i {a,b.d to ~nOli (a,b,c) . . c{-ss't

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    56/61

    CAPITULO Hi. PROBLEMAS 25[

    busc~ ;; [([1l'lt.] ,b,Int)] -> [([Int] ,Ilit.,Ilit)] -~ Unlit]I,Imt,mt)]buaca [] !:s,t_:RQ!:!_"isit.ado!:! = erro:!iI:" ~:fr!IJc"se

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    57/61

    252 HASKELL: mIA A80RDAG8:'1I PRAnCA

    - - - - - - - - - - - - - - - - - / Fw l . co e ! : ! J i . u x i l : i a r e ~ ! - - - - - - - - - - - - - - - -{--aIlCOl1lt:l:"1'1]011Cpriliii,,2 [) putStr ".HIii":il=p.rilllc2: (a:x)- de

    {iinplist1l (l ";ilii.p:di!tS2 x

    }:ltiDp1ist"- lnt -> Unit] ->IOO1i!lpH :s'~a X [II.] = do

    {putStr " ;pu tStr .(~O\I a):putStrLu. "I ~;P l .l :t .SU 'LR , ,- -- -- -- "}

    ii!lpli sua 0 a do{

    putStrlll .,

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    58/61

    CAPITULO Hi. PROBLEMAS 25 ,3putStr I n ,1l!lplist

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    59/61

    APENmClE A. AJl .I BI ENTES DE PROGRAMAQAo 275fm19D8S, ~tC ' " VEtO SE! t,M",f~ d ! " , qep "w ; , , ,, i k> , Ad i d o11~ lm 'm t " " runeditor < : 1 " , texto qu e I;

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    60/61

    280 HASKELL:mIA A80RDAG8:'1I PRAnCA~adn;> m: [frue, True TrU>l3']Jru.g,Hain> or [Tr!li~. Fdse, '!1:'l,le]T~Ioladn> m: U'als8 .Fatse, Falsa]F1IIEICI

    any A. .hn :L! :~~1ospan l"ooabe UI1L;;}, booI8U.J1iJ.. ClUflll:iJ pa.:r,'i~He1rD: 8, il., ' p - L l r 1 t : i . 1 I ' " d~'L':l.~ pen::'Or:~e-::i!;!,u~:n,:l.dada lista se ocorrer n :::I c(>ndi~iJ.es verdadelras, percorrendo cada elemento da listaI;!, fun~iio retoma True, Qo [ I i i . o , nocaso de 1 : 1 8 . 0 eneontrar neuhuma ool1di~ao verdedelea,rstorua Fais.Soja tm:,~lun~lod allY fUll.~~.Q "tit!.llo'":1""1",,,

    a.llL [datli ,\ any, tnus, ;;oi!L8!ltEl !;1;! todas as vr:mdlQoes for))! valdflli8il'a~., .lpl!l-~"" j untando em uma lista, Depois, pega Q8 seg.lJnd08 elementos detodas L . S tuph"", '" coloc,. am uma !!Iegund,. lista, Estas d uas listas ,;;[iu. colocadas emuma tupla,Ex.:H1I< 'ln> unarp [( ' !l .' , 'o'), ('Q' , 'n'), ('j"'t'), ("e' , "e ')]("'h.oje-, "O!lte-)

    M a teri a l com d i re itos au tor

  • 5/12/2018 Haskell - Uma abordagem prtica (incompleto)

    61/61

    Haskell e uma I l i lnguslgem funcional. de corncep~. lomod iem a,. , c uja b ase 8 1 fu nd amen ta .; il ,o ma tema ti :c ado callculo lambda, Apresenta concer tos diferendaiscomo tipa,'gem pol~m6rfi'ca. , a va~~a~ao 'pregl l i l~ , t ;QSa,f r u r r u ; : oe o s d e .8 I ta,-orde 1 m e s o b re c a . r g a l , G ' J e ~ 1 J n ~ Q 'e . s . . .Seu a.mbient'e operaciorral se bQlseiacem urn esque-ma de cerreqamentc de' modules ~ue a.prese ntarnfu n