Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 14700

Dúvidas de haskell para principiantes

$
0
0
@Hugo.mls93, O teu problema é que a função mod só pode ser utilizada em notação infixa se a utilizares na forma x `mod` y (caso contrário terá que ser mod x y). Isto é daquelas coisas que se aprende desde cedo em Haskell: funções com 2 argumentos podem ser utilizadas como operadores binários se forem escritas entre `` (atenção: não são apóstrofos mas sim acentos graves). Relativamente ao teu código propriamente dito (corrigido), ainda pode ser muito simplificado. multiplo :: Int -> Int -> Bool multiplo m n = m `mod` n == 0 -- alternativamente, podia ter escrito mod na sua forma prefixa -- multiplo m n = mod m n == 0 Como vens de C, provavelmente ainda estás pouco habituado a pensar em Haskell, mas aqui vai na mesma: Os argumentos não precisam de ser envolvidos num tuplo (como tinhas (Int, Int)), isso tira-te flexibilidade a longo prazo Nunca se deve verificar uma expressão booleana e devolver True se ela for verdadeira ou False se ela for falsa. Basta devolver o resultado da própria expressão. Depois, falaste em «simplificar» devolvendo 0 ou 1. Em que medida é isto uma simplificação? A tua função tem como objectivo responder a uma pergunta: um determinado número m é múltiplo de n? A resposta é, naturalmente, booleana -- sim ou não -- e não um número inteiro. Relativamente à questão de mostrar "é inteiro" (presumo que queiras dizer antes "é múltiplo"), também não tem interesse fazer parte da tua função. Imagina que eu vou usar a tua função num programa maior, onde verifico milhares de vezes se um determinado número é múltiplo de outro; eu só quero que a tua função me devolva True ou False silenciosamente, não quero que ela imprima no ecrã do utilizador milhares de linhas com o resultado. Os programas devem ser escritos com uma separação clara entre a lógica (a tua função multiplo) e a sua apresentação (as mensagens que queres que apareçam). A partir do momento em que começas a misturá-las, vais ter muitas dores de cabeça, especialmente em Haskell.

Viewing all articles
Browse latest Browse all 14700