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>

Variáveis[editar | editar código-fonte]

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

Tipos[editar | editar código-fonte]

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:[]))))

Funções[editar | editar código-fonte]

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)

Notas[editar | editar código-fonte]

  1. The Haskell 98 Report, s. 6.1.4