Je veux trouver le premier élément correspondant dans une liste infinie dans Haskell.Filtre parallèle liste infinie dans Haskell
Ce code fonctionne:
findPassword passwordHash = (head . filter (checkPassword passwordHash)) allStrings
checkPassword est très long (parce que c'est un hachage SHA1)
checkPassword hash string = (sha1 string) == hash
allStrings est juste la liste de toutes les chaînes possibles:
allStrings = [ c : s | s <- "" : allStrings, c <- ['a'..'z'] ++ ['0'..'9'] ]
Je veux que ce code soit exécuté en parallèle mais si je remplace le filtre par parFilter:
import qualified Control.Parallel.Strategies as S
parFilter p = S.withStrategy (S.evalBuffer 1000 S.rseq) . filter p
Cela ne fonctionne pas ... Avez-vous une idée? Ce code utilise également beaucoup de mémoire mais c'est un autre problème. Le script complet est disponible ici https://github.com/ThibaudDauce/habreaker
Comment savez-vous doesn Ne travaillez pas? – Gurkenglas
il court juste pour toujours et mange toute ma RAM et tout mon processeur –