Haskell/Variáveis e funções

Origem: Wikilivros, livros abertos por um mundo aberto.
Ir para: navegação, pesquisa

Os exemplos deste capítulos podem ser incluidos em um arquivo e carregados pelo interpretador através do comando :load <nome do arquivo>

Índice

[editar] Variáveis

Em Haskell, as variáveis não variam. Ou seja, tecnicamente, são constantes. Ou, equivalentemente, não existem variáveis como nas outras linguagens de programação.

Na prática, variáveis assumem um valor quando são criadas, e este valor não muda nunca.

Uma variável é definida na forma:

  Prelude> let x = 3.14159265358979323846264338327950

Para ver o valor da variável, basta escrevê-la:

  Prelude> x
  3.141592653589793

[editar] Tipos

Ao fazer uma declaração da forma let identificador = valor, Haskell tentará "chutar" o tipo da variável. Assim, o fragmento de código seguinte dará erro:

  Prelude> let x = 1.5
  Prelude> let y = 2
  Prelude> x * y

O motivo é que x é um Double e y é um Integer, e não existe multiplicação de Double por Integer. Se quisermos definir uma variável Double mas definí-la usando um valor inteiro, devemos fazer:

  Prelude> let z = 10 :: Double

Os tipos básicos da linguagem incluem:

Tipo de dado Descrição Classes Exemplo da sintaxe
Bool Enumeração de valores booleanos, que permitem certas operações lógicas, como conjunção (&&), disjunção (||) e negação (not). Read, Show, Eq, Ord, Enum, Bounded True
False
Char Enumeração de caracteres 16-bit, Unicode. A faixa dos primeiro 128 caracteres é idêntica ao ASCII. Read, Show, Eq, Ord, Enum, and Bounded 'a'
Double Ponto flutuante com maior intervalo e precisão que Float RealFloat
Either Eq, Ord, Read, Show
Float Ponto flutuante RealFloat 6553.612
321.6e-3
IO Tipo abstrato para operações de E/S, como putStr, print, getChar, getLine e readIO. Monad, Functor
IOError Tipo abstrato para erros nas operações de E/S com IO. Show, Eq
Int Inteiro que cobre, pelo menos, o intervalo de valores [-2^29, 2^29 - 1]. Integral 123
Integer Inteiro de precisão ilimitada, com as mesmas funções e operadores de Int Integral 123
Maybe Lida com valores opcionais ou ilegais sem terminar o programa e sem usar o IOError de IO. Eq, Ord, Read, Show
Ordering Eq, Ord, Bounded, Enum, Read, Show
String Cadeia de caracteres, representada sob forma de lista de Char. A sintaxe tanto pode ser de lista quanto a abreviação, entre aspas. "Texto"
['T','e','x','t','o']
Tuplas Tipo de dado algébrico de definição de registros heterogêneos, tuplas. A quantidade máxima de elementos depende da implementação, mas a quantidade mínima de quinze elementos é sempre garantida.[1] Eq, Ord, Bounded, Read, Show ('A',11,True)
Listas Tipo de dado algébrico de definição de registros homogêneos listas. Entre os operadores disponíveis encontra-se !!, que retorna o n-ésimo elemento da lista, e ++, que concatena duas listas distintas de mesmo tipo. Relacionado a concatenação, há o operador :, que adiciona um elemento no topo de uma lista. Eq, Ord [1,2,3,4]
[1..4]
(1:(2:(3:(4:[]))))

[editar] Funções

Em Haskell, funções não usam parêntesis. O que em matemática costuma representar-se por f(x) e f(x,y) aparece no código como f x e f x y.

Assim, a declaração de uma função tem a forma:

  Prelude> let areaq lado = lado^2

Ou seja, definimos que a função areaq (área do quadrado) é a função que pega lado e retorna o seu quadrado.

Uma função para calcular a hipotenusa de um triângulo retângulo é:

  Prelude> let hipotenusa cateto1 cateto2 = sqrt(cateto1^2 + cateto2^2)

[editar] Notas

  1. The Haskell 98 Report, s. 6.1.4