Tôi muốn tìm phần tử khớp đầu tiên trong danh sách vô hạn trong Haskell.Bộ lọc song song danh sách vô hạn trong Haskell
Mã này đang làm việc:
findPassword passwordHash = (head . filter (checkPassword passwordHash)) allStrings
checkPassword thực sự là dài (vì đó là một băm SHA1)
checkPassword hash string = (sha1 string) == hash
allStrings chỉ là danh sách của tất cả các chuỗi có thể:
allStrings = [ c : s | s <- "" : allStrings, c <- ['a'..'z'] ++ ['0'..'9'] ]
Tôi muốn mã này được chạy song song nhưng nếu tôi thay thế bộ lọc theo parFilter:
import qualified Control.Parallel.Strategies as S
parFilter p = S.withStrategy (S.evalBuffer 1000 S.rseq) . filter p
Nó không hoạt động ... Bạn có ý tưởng không? Mã này cũng đang sử dụng rất nhiều bộ nhớ nhưng đó là một vấn đề khác. Toàn bộ tập lệnh có sẵn tại đây https://github.com/ThibaudDauce/habreaker
Làm thế nào để bạn biết nó doesn không làm việc? – Gurkenglas
nó chỉ chạy mãi mãi và ăn tất cả RAM của tôi và tất cả bộ vi xử lý của tôi –