You are on page 1of 3

Faculdade de Computao

Programao Funcional (BCC/BSI) 1 Perodo


Aula Prtica: Expresses e Funes em Haskell

WinHugs
O sistema Hugs uma implementao da linguagem Haskell que pode ser executada em
PCs e sistemas Unix, incluindo Linux. Pode ser obtido gratuitamente em
www.haskell.org/hugs. A figura abaixo mostra a tela inicial do WinHugs (Hugs para
Windows) em que podemos carregar programas ou executar diretamente expresses.

Avaliando expresses no Hugs:


O sistema Hugs utiliza a biblioteca Prelude.hs, que sempre carregada inicialmente. O
prompt '>' indica que o sistema est esperando por uma expresso a ser avaliada. A
biblioteca Prelude.hs define funes bsicas para operaes sobre inteiros, incluindo as 5
operaes aritmticas de adio, subtrao, multiplicao, diviso e exponenciao
(usando os smbolos ^ ou **, para operandos positivos e negativos respectivamente).
Hugs> 2 * 3 - 7
-1
Hugs> 2 ^ 5
32
Hugs> 2 ** (-5)
0.03125
Hugs> 2 ^ 3 ^ 4
2417851639229258349412352
Hugs> 2 * 7 - 13 + 2 / 3
1.66666666666667
Hugs> 2 ^ 3 * 4
32

Podemos notar que 2 * 3 7 o mesmo que (2 * 3) 7 pois o smbolo de multiplicao


tem precedncia sobre adio/subtrao. Em caso de operadores de mesma
precedncia, a associao feita da esquerda para a direita: 2 - 1 + 4 visto como (2 1)
+ 4, com exceo do operador de exponenciao. Numa expresso como 2 ^ 3 ^ 4
teremos 2 ^ (3 ^ 4).

Faculdade de Computao
Programao Funcional (BCC/BSI) 1 Perodo
Aula Prtica: Expresses e Funes em Haskell
Na prtica de programao podemos adotar o uso de parnteses para tornar mais claras
as expresses e explicitar as convenes citadas acima.

Editando um programa:
Para escrever e editar um programa em Haskell podemos utilizar o Bloco de Notas. Vrios
programas podem estar num mesmo arquivo que deve ser armazenado com a extenso
(.hs). A figura abaixo mostra o exemplo da funo par, que retorna verdadeiro se um
nmero inteiro for par, e falso, caso contrrio.

A janela abaixo exemplifica a carga e a execuo da funo par no ambiente WinHugs:

Alguns comandos teis no Hugs:


C o m a nd o

M a ri a

S i g nifi c a d o

:load arq.ext

carregar o arquivo

:reload

recarregar o arquivo atual

:edit arq.ext

editar o arquivo pedido

:edit

editar o arquivo atual

:type expr

mostrar o tipo de uma expresso

:?

mostrar todos os comandos

:quit

encerrar o Hugs

Faculdade de Computao
Programao Funcional (BCC/BSI) 1 Perodo
Aula Prtica: Expresses e Funes em Haskell

Exerccios:
1) Teste as expresses abaixo e explique cada resultado.
>
>
>
>
>
>
>
>
>
>
>

7 `div` 2
7 `div` 2 == div 7 2
x * 3 where x = 10
3 > 5
False == False
if (mod 5 2 == 0) then 1 else 2
a > b
"abc" == "abc"
"elegante" < "elefante"
[1, 2, 3] < [1, 2]
:type (+)

2) Teste as expresses abaixo e defina parnteses para as mesmas:


2 ^ 3 4
2 3 + 4 5
2 + 3 4 ^ 5

3) Escreva uma funo para calcular a multiplicao de trs nmeros inteiros, como no
exemplo abaixo:
> mult 3 4 5
60

4) Escreva uma funo que recebe um valor numrico e devolva o valor 1 se o valor for
maior que zero, -1 se for negativo, 0 se for zero.
5) Faa uma funo que, dados trs parmetros de entrada, se o primeiro for um
asterisco, os outros dois sero multiplicados; se for uma barra, o segundo deve ser
dividido pelo terceiro; se no for nenhum dos dois, imprima uma mensagem de erro.
6) Seja a funo ehDigito definida abaixo para um valor do tipo caracter. Faa uma funo
que verifique se um caracter uma letra.
ehDigito::Char->Bool
ehDigito c = c >= '0' && c <= '9'

7) Escreva funes para calcular:


(a) Uma equao do primeiro grau (ax + b )
(b) Uma equao do segundo grau (ax + bx + c)