Comme mon premier programme de haskell j'essaye de faire ceci - c'est la manière dure d'obtenir 1 à 10. Je construis une liste infinie d'entiers, et les classant, et prenant le premier 10. Mon intention était de convaincre moi-même que je pourrais travailler avec des listes infinies sans causer d'évaluation d'eux au-delà de ce qui était strictement (ahem) requis pour le résultat demandé.Pourquoi ghc évalue-t-il ma liste infinie?
Mon code est ..
module Main where
import Data.List
minima n xs = take n (sort xs)
main = do
let x = [1..]
print (minima 10 x)
avec GHC et Compiler en cours d'exécution de l'exécutable résultant .. il est assis là jusqu'à l'allocation tué.
Des indices?
plutôt que le tri, essayez d'élévation au carré chaque valeur: prendre 10 $ map (^ 2) [1 ..] –