Was bewirkt, dass eine F # Sequenz neu auflisten?
Frage
Ich habe einen Parser, der effektiv eine Reihe von rekursiven Funktionen ist auf einer Folge von Lexer Token arbeiten.
Das Problem in Ich renne ist, dass die Sequenz von Anfang an auf rekursive Funktionsaufrufe zu starten scheint. Angesichts der folgenden Skelett-Definition für die Funktion Parse
let restricted = Seq.take_while token_search tokens
let compiled_nodes = Seq.fold (fun list (next: Lexer.Token) -> list @ parse_token this restricted next) [] restricted
Die Funktion parse_token
in einem Aufruf in Parse
führen kann.
jedoch, wenn das passiert, endet die Parameter tokens
am Anfang der Sequenz positioniert werden.
Alle Ideen, wie die Sequenz zu halten positioniert, wo es sein muss?
tia
Lösung
Ich glaube, Sie müssen einen etwas größeren Schnipsel schreiben, da ich ziemlich bin nicht Sie folgen.
Das heißt, eine Folge (IEnumerable) ist genau das - eine Sequenz, und jedes Mal, wenn Sie für (foreach) oder Seq.Whatever darüber, wird es wieder Iterierte 'die Folge. Ich bin nicht klar, was Sie tun wollen, und was Sie passieren erwarten, aber für einen Parse, was ‚Token‘ als eine Folge sein kann ‚falsch‘, wie Sie in der Regel Partition Token in eine verbrauchte / engagierte Region und ein Look-Ahead-Bereich.
Beachten Sie auch, dass Sie in der Regel nicht wollen ‚über eine Sequenz iterieren‘ Nebenwirkungen zu haben.