Ho notato che, per qualche motivo, la funzione max di Haskell (che restituisce il massimo di due numeri) è molto più veloce di quella che ho scritto, anche se sono essenzialmente identici.
Da questo sito: link , Ho scoperto che la funzione massima standard è definita come:
max x y
| x <= y = y
| otherwise = x
che è in grado di eseguire
foldr max 0 [0..10000000]
in 7,6 secondi (il mio laptop è in modalità risparmio energetico)
Ho scritto la stessa identica funzione e l'ho eseguita, e
foldr myMax 0 [0..10000000]
ha avuto una media di 23,74 secondi
Le due funzioni sembrano identiche, tranne per il fatto che il valore max incorporato non sembra avere una firma di tipo (a meno che non sia nascosto da qualche parte.)
Qualcuno sa cosa potrebbe succedere qui? Dubito seriamente che una funzione integrata funzioni più di tre volte più velocemente di una identica, definita dall'utente. Per me sarebbe molto strano.
(Quando dico che sono identici, intendo letteralmente cloni l'uno dell'altro. Solo per testare, I C è uscito dal Preludio, ed è ancora molto più lento.)
Modifica: ci ho pensato di più, e penso che potrebbe avere qualcosa a che fare con le funzioni incluse che sono precompilate, dove -come le mie funzioni sono interpretate tramite GHCI (che avrebbe senso allora). Lascerò presente nel caso qualcuno abbia una risposta migliore, ma sospetto che sia la causa.
(Una cosa che ho capito che non capisco è perché GHCI dice che è compilato il mio codice dopo una modifica, ma poi continua dicendo che è interpretarlo. Non interpreti il codice compilato, vero?)