1unitedpower: Informatik zum Donnerstag

Beitrag lesen

Das liegt vermutlich an der schlechten Implementierung von natE - also mein Fehler. Ich hätte natE tail-rekursiv schreiben können, dann würde der Stack überhaupt nicht wachsen. Mal sehen, ob ich das noch hinbekomme.

Die tail-rekursive Variante muss noch warten, aber ich habe in der Zwischenzeit eine iterative Variante entwickelt, die das Problem umschifft.

Die tail-rekursive Variante habe ich jetzt auch.

function natE<a>(acc:a, step: ((x:a) => a), n:Nat) : a {
  return (n instanceof Zero)
    ? acc
    : natE(step(acc), step, n.pred);
}

Aber leider ist nur Safari in der Lage dazu die Tail-Calls zu optimieren. Das heißt in allen anderen Browser kommt es trotzdem zu einem Stackoverflow. Schade.