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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage