wie man den “Stapelspeicherüberlauf” in haskell löst
Das Ausführen des folgenden Programms wird "Speicherplatzüberlauf: aktuelle Größe 8388608 Bytes" drucken. ich habe gelesendiese unddieseIch weiß aber immer noch nicht, wie ich mein Problem lösen soll. Ich benutze foldr, sollte es nicht garantiert "Schwanz rekursiv" sein?
Haskell gefällt mir soweit sehr gut, bis ich weiß, dass ich bei der Verwendung der leistungsstarken Rekursion einen "Raumüberlauf" verhindern sollte. :)
module Main where
import Data.List
value a b =
let l = length $ takeWhile (isPrime) $ map (\n->n^2 + a * n + b) [0..]
in (l, a ,b)
euler27 = let tuple_list = [value a b | a <-[-999..999] , b <- [-999..999]]
in foldr (\(n,a,b) (max,v) -> if n > max then (n , a * b) else (max ,v) ) (0,0) tuple_list
main = print euler27
BEARBEITEN: Entfernen Sie die Definition vonisPrime
der Einfachheit halber