Articles of haskell

Implicações do foldr vs. foldl (ou foldl ‘)

Em primeiro lugar, o Real World Haskell , que estou lendo, diz para nunca usar foldl e, em vez disso, usar foldl’ . Então eu confio nisso. Mas eu estou confuso quando usar foldr vs. foldr foldl’ . Embora eu possa ver a estrutura de como eles funcionam de maneira diferente na minha frente, sou […]

Compreensão finita de uma lista infinita

Eu digitei o seguinte em ghci, pensando que uma das duas coisas aconteceria: 1) O interpretador iria travar, procurando em todos os membros de uma lista infinita por correspondências a um predicado; ou 2) através das cortinas Haskell jujitsu, o intérprete descobriria que a sequência termina em 4 e pára aí. [x | x x] […]

Como agrupar itens semelhantes em uma lista usando o Haskell?

Dada uma lista de tuplas como esta: dic = [(1,”aa”),(1,”cc”),(2,”aa”),(3,”ff”),(3,”gg”),(1,”bb”)] Como agrupar itens de dic resultando em uma lista grp onde, grp = [(1,[“aa”,”bb”,”cc”]), (2, [“aa”]), (3, [“ff”,”gg”])] Eu sou realmente um recém-chegado a Haskell … e parece estar se apaixonando por isso .. Usando group ou groupBy em Data.List agrupará itens adjacentes semelhantes em […]

Uma function Haskell do tipo: IO String-> String

Eu escrevi um monte de código em Haskell para criar um índice de um texto. A principal function é assim: index :: String -> [(String, [Integer])] index a = […] Agora eu quero dar a esta function uma String lida de um arquivo: index readFile “input.txt” O que não funciona porque o readFile é do […]

O que há de tão ruim com o Lazy I / O?

Eu geralmente ouvi que o código de produção deve evitar o uso de Lazy I / O. Minha pergunta é: por quê? É sempre bom usar Lazy I / O fora de apenas brincar? E o que torna as alternativas (por exemplo, enumeradores) melhores?

O que são paramorfismos?

Lendo através deste artigo clássico , estou preso em paramorfismos. Infelizmente a seção é bem fina, e a página da Wikipedia não diz nada. Minha tradução do Haskell é: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h […]

Haskell: Analisar erro no padrão

Quem gosta de me dizer o que está errado com este código (sintaticamente)? — merge two sorted lists mergeX [] b res = b ++ res mergeX a [] res = a ++ res mergeX a:as b:bs res | a > b = mergeX as b:bs a:res | otherwise = mergeX a:as bs b:res Intérprete: […]

comportamento foldl versus foldr com listas infinitas

O código para a function myAny nesta questão usa o foldr. Ele interrompe o processamento de uma lista infinita quando o predicado é satisfeito. Eu reescrevi usando o foldl: myAny :: (a -> Bool) -> [a] -> Bool myAny p list = foldl step False list where step acc item = p item || acc […]

Memoização em Haskell?

Quaisquer pointers sobre como resolver eficientemente a seguinte function em Haskell, para números grandes (n > 108) f(n) = max(n, f(n/2) + f(n/3) + f(n/4)) Já vi exemplos de memoização em Haskell para resolver números de fibonacci, que envolviam computação (preguiçosamente) de todos os números de fibonacci até o n necessário. Mas, neste caso, para […]

`String ‘é aplicado a muitos argumentos de tipos

Estou apenas aprendendo Haskell e estava tentando escrever um programa simples para eliminar os primeiros n caracteres de uma String . Isso é o que eu recebi: cutString :: (Num n, String str) => n -> str -> str cutString n str = case n of 0 -> tail str n -> cutString (n-1) (tail […]