Qu'est-ce qui provoque la ré-énumération d'une séquence F #?
Question
J'ai un analyseur syntaxique qui est en réalité un ensemble de fonctions récursives fonctionnant sur une séquence de jetons lexer.
Le problème que je rencontre est que la séquence semble reprendre depuis le début lors d'appels de fonction récursifs. Étant donné la définition du squelette suivante pour la fonction Analyser
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
La fonction parse_token
peut entraîner un appel dans Parse
.
Cependant, lorsque cela se produit, le paramètre tokens
se positionne au début de la séquence.
Avez-vous des idées sur la façon de garder la séquence positionnée là où elle doit être?
tia
La solution
Je pense que vous devrez peut-être publier un extrait un peu plus gros, car je ne vous suis pas tout à fait.
Cela dit, une séquence (IEnumerable) n’est que cela - une séquence, et chaque fois que vous le faites (pour chaque) ou que vous le fassiez, quoi qu’il en soit, il "répétera" la séquence. Je ne sais pas ce que vous voulez faire et ce que vous souhaitez, mais pour une analyse, représenter des "jetons" en tant que séquence peut être "faux", car vous partitionnez généralement des jetons en une région consommée / engagée et en une région en attente.
Notez également que vous ne souhaitez généralement pas que les "itérations sur une séquence" aient des effets secondaires.