Non ho quasi nessuna conoscenza di haskell e ho cercato di risolvere alcuni problemi di Eulero di progetto. Mentre risolvere Number 5 ho scritto questa soluzione (per 1..10)Prestazioni di "tutti" in haskell
--Check if n can be divided by 1..max
canDivAll :: Integer -> Integer -> Bool
canDivAll max n = all (\x -> n `mod` x == 0) [1..max]
main = print $ head $ filter (canDivAll 10) [1..]
Ora ho scoperto, che all
viene implementata in questo modo:
all p = and . map p
non significa questo, la condizione è controllato per ogni elemento? Non sarebbe molto più veloce spezzare il primo Falso-Risultato della condizione? Ciò renderebbe più veloce l'esecuzione del codice sopra.
Grazie
Non credo che il suo problema è che non si rese conto che 'e' cortocircuiti, ma piuttosto che pensava' mappa 'passerebbe attraverso l'intera lista prima che' e' anche eseguito (come sarebbe il comportamento nelle lingue desiderose) perché non capisce/conosce la valutazione pigra. – sepp2k