Ich habe einen Parser, der effektiv eine Reihe von rekursiven Funktionen ist, die auf einer Sequenz von Lexer-Tokens arbeiten.Wodurch wird eine F # -Sequenz erneut aufgezählt?
Das Problem, das ich renne, ist, dass die Sequenz bei rekursiven Funktionsaufrufen von vorne zu beginnen scheint. In Anbetracht 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. In diesem Fall wird der Parameter tokens
am Anfang der Sequenz positioniert.
Haben Sie Ideen, wie Sie die Sequenz so positionieren können, wo sie sein muss?
tia
Sie sind ziemlich richtig. Ich erkannte, dass nachdem ich die Frage gestellt hatte, und erkannte, was das Problem war. Ich habe versucht, das Äquivalent eines gemeinsamen IEnumerator zu erstellen, was der falsche Ansatz war. Ich habe es über Listen aufgebaut und den unverbrauchten Rest herumgereicht. – kolosy