F # Seq.initInfinite gibt StackOverflowException

7

Ich lerne F #, und ich habe Probleme zu verstehen, warum das abstürzt. Es ist ein Versuch, Project Euler Problem 2 zu lösen.

%Vor%

Die endgültige Version würde eine Summenfunktion aufrufen (und hätte eine höhere Grenze als 55), aber das ist Lerncode.

Dies ergibt eine StackOverflowException. Wenn ich jedoch in [1..30] kommentiere und Seq.initInfinite auskommentiere, bekomme ich:

%Vor%

Es scheint, dass es Elemente auf Anfrage erzeugt, wie ich es in LINQ erwarten würde. Warum explodiert es, wenn es mit initInfinite verwendet wird?

    
TrueWill 11.05.2010, 02:08
quelle

2 Antworten

14

Seq.initInfinite gibt eine Sequenz zurück, die bei 0 beginnt.

Ihre fibonacci -Funktion führt zu einem Stapelüberlauf, wenn sie mit Null aufgerufen wird, weil sie niemals die abschließenden Fälle trifft.

Sie können dies lösen, indem Sie von Seq.initInfinite (fun n -> n + 1)

ausgehen     
SLaks 11.05.2010, 02:11
quelle
6

Sie beginnen mit 0 mit initInfinite , was dann -1, -2, ... zurückgibt.

(Übrigens, wenn Sie den Visual Studio-Debugger verwenden, ist dies leicht zu diagnostizieren, indem Sie das Call-Stack- und das Locals-Fenster überprüfen.)

    
Brian 11.05.2010 02:13
quelle

Tags und Links