¿Qué hace que una secuencia de F # se vuelva a enumerar?
Pregunta
Tengo un analizador que es efectivamente un conjunto de funciones recursivas que funcionan en una secuencia de tokens lexer.
El problema con el que me encuentro es que la secuencia parece reiniciarse desde el principio en llamadas a funciones recursivas. Dada la siguiente definición de esqueleto para la función 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
La función parse_token
puede provocar una llamada a Parse
.
Sin embargo, cuando eso sucede, el parámetro tokens
termina posicionado al comienzo de la secuencia.
¿Alguna idea sobre cómo mantener la secuencia posicionada donde debe estar?
tia
Solución
Creo que es posible que necesites publicar un fragmento un poco más grande, ya que no te estoy siguiendo del todo.
Dicho esto, una secuencia (IEnumerable) es solo eso: una secuencia, y cada vez que usted (foreach) o Seq. Lo que sea que ocurra sobre ella, 'repetirá' la secuencia. No tengo claro qué desea hacer y qué espera que suceda, pero para un análisis, representar 'tokens' como una secuencia puede ser 'incorrecto', ya que generalmente divide los tokens en una región consumida / comprometida y una región anticipada.
Tenga en cuenta también que normalmente no desea que 'iterar sobre una secuencia' tenga efectos secundarios.