Właśnie zacząłem uczyć się Haskella. Próbuję znaleźć x na liście, dla której score x
ma maksymalną wartość. Próbowałem snd (maximum [(score x, x) | x <- codes])
, który działa, ale zastanawiałem się, czy był szybszy sposób to zrobić, bez faktycznego przechowywania zarówno funkcji i wartości.Haskell: x na liście dla której f (x) jest maksymalna
Dzięki za wszelkie sugestie!
Nie przejmuj się, że wyniki są "przechowywane" - tak jak Haskell i GHC działają, nie będą. Na przykład skompilowany program 'main = print (maksymalnie [(2 * x, x) | x <- [1..100000000000] :: [Int]])' może potrwać około 10-15 minut, ale będzie więc w małej, stałej pamięci, ponieważ kompilator ustali, że ani kody, ani wyniki nie muszą być przechowywane, aby uzyskać odpowiedź. –
Należy pamiętać, że jeśli kody mają taki sam wynik, wybierze się między nimi, wybierając maksymalny kod, jednak dla tego typu jest zdefiniowane słowo "Ord". To może, ale nie musi być to, co chcesz. – Carl
'snd. maximumBy (porównując fst). map (score && & id) 'działa również dla typów innych niż" Ołe ". –