12.07.2015 Views

A Linguagem Funcional Haskell - Departamento de Informática e ...

A Linguagem Funcional Haskell - Departamento de Informática e ...

A Linguagem Funcional Haskell - Departamento de Informática e ...

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.

um conhecimento prévio <strong>de</strong>sta área terão uma maiorfacilida<strong>de</strong> no entendimento do artigo do que aquelesque são leigos no assunto citado.Outra questão interessante e que não po<strong>de</strong><strong>de</strong>ixar <strong>de</strong> ser dita é a <strong>de</strong> que quase todos osproblemas que são implementados em <strong>Haskell</strong> játiveram uma resolução indutiva construídaanteriormente.Conforme visto em [SCH 92] a indução éuma ferramenta muito po<strong>de</strong>rosa no<strong>de</strong>senvolvimento <strong>de</strong> algoritmos e esta geralmentetraz uma resolução elegante aos problemasapresentados. A Tese <strong>de</strong> Church, que não seráabordada aqui, comprova que todo e qualquerproblema resolvido imperativamente possui umresolução indutiva, ficando claro então que todosaqueles que quiserem se aventurar e conhecer o<strong>Haskell</strong> mais a fundo <strong>de</strong>veriam primeiramentepossuir um conhecimento prévio <strong>de</strong>stas duas áreas,cálculo lambda e indução.Tendo consciência também <strong>de</strong> que esta éuma linguagem extremamente tipada, torna-sesabido que para aqueles que já tiveram algumcontato como linguagens não tipadas como Perl,Tcl, ou Scheme, infelizmente terão uma dificulda<strong>de</strong>ainda maior para com o entendimento dalinguagem.Já aqueles que possuem algum tipo <strong>de</strong>experiência com linguagens tipadas como Java, C,Modula, ou até mesmo ML, irão ter maiorfacilida<strong>de</strong> no entendimento quanto ao sistema <strong>de</strong>tipos da linguagem apresentada neste trabalho.<strong>Haskell</strong> também é conhecido comocalculadora funcional e a forma <strong>de</strong> avaliação <strong>de</strong>expressões é <strong>de</strong> extrema importância, pois esta éque não <strong>de</strong>ixará que certas expressões resultem emnão-<strong>de</strong>terminismo. Todas as expressões sãoreduzidas tendo como base o cálculo lambda emaiores aprofundamentos sobre este po<strong>de</strong>m serencontrados em [THO 87].Toda e qualquer expressão em <strong>Haskell</strong> éavaliada como sendo uma equação matemática, ouseja, está po<strong>de</strong> ser construída, avaliada e resolvidautilizando-se sempre <strong>de</strong> leis algébricas.Qualquer expressão apresentada aocomputador será entendida como sendo um valor,sendo assim o papel do computador torna-se obter aforma normal ou mais reduzida possível <strong>de</strong>ste valore isto é feito através <strong>de</strong> b - reduções. Deduz-se entãoque o significado <strong>de</strong> uma expressão é seu valor e atarefa do computador é encontra - lo.Sessões e ScriptsAo passarmos uma expressão para esta seravaliada pelo computador o processo <strong>de</strong> avaliação eevolução é chamado sessão, sendo assim tendocomo prompt o ponto <strong>de</strong> interrogação (?). Algunsexemplos <strong>de</strong> sessão são apresentados abaixo.Exemplo 1:? 64 expressão apresentada64 valor <strong>de</strong> retorno apresentado ao usuárioExemplo 2:? 8*8 expressão apresentada64 valor <strong>de</strong> retorno apresentado ao usuárioNote que nos dois exemplos acima sãopassados expressões, a primeira já esta em suaforma normal, logo o computador não po<strong>de</strong> fazermais avaliações, então ele somente retorna o valor aapresentado, no entanto a segunda expressão po<strong>de</strong>rser avaliada e evoluída então ele, o computador, faza avaliação e evolução da expressão, até chegar auma forma normal e daí então retorna o valorencontrado. Concluímos então que uma sessão éiniciada com a passagem <strong>de</strong> uma expressão para ocomputador e só será terminada quando esteretornar algum valor.O nome Script é dado a área <strong>de</strong> <strong>de</strong>claração<strong>de</strong> funções e tipos, e alguns exemplos <strong>de</strong> <strong>de</strong>claração<strong>de</strong> tipos e funções serão dados logo a seguir, poresta razão não serão dados exemplos por enquanto.Valores e TiposSegundo [HUD 97] expressões <strong>de</strong>notamvalores e tipos <strong>de</strong> expressões são apenas termossintáticos que <strong>de</strong>notam tipos <strong>de</strong> valores ou só tipos.Todo valor possui um tipo associado, eintuitivamente po<strong>de</strong>mos pensar que tipos são<strong>de</strong>finições <strong>de</strong> valores.Valores em <strong>Haskell</strong> são consi<strong>de</strong>rados tiposprimários e po<strong>de</strong>m ser passados para funções comoargumentos, e estes irão retornar como respostascolocadas em estruturas <strong>de</strong> dados.Tipos por outro lado não são consi<strong>de</strong>radosprimários e trazem como sentido principal a<strong>de</strong>scrição <strong>de</strong> um valor. A associação <strong>de</strong> um tipo aum valor é chamada "typing".

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

Saved successfully!

Ooh no, something went wrong!