Cosa causa il re-enumerazione di una sequenza F #?
Domanda
Ho un parser che è effettivamente un insieme di funzioni ricorsive che operano su una sequenza di token lexer.
Il problema in cui mi imbatto è che la sequenza sembra ricominciare dall'inizio con chiamate di funzione ricorsive. Data la seguente definizione di scheletro per la funzione 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 funzione parse_token
può provocare una chiamata in Parse
.
Tuttavia, quando ciò accade, il parametro token
finisce posizionato all'inizio della sequenza.
Qualche idea su come mantenere la sequenza posizionata dove deve essere?
tia
Soluzione
Penso che potresti dover pubblicare uno snippet leggermente più grande, poiché non ti sto seguendo.
Detto questo, una sequenza (IEnumerable) è proprio quella - una sequenza, e ogni volta che per (foreach) o Seq. Qualunque cosa sopra, "ripeterà" la sequenza. Non sono chiaro cosa tu voglia fare e cosa ti aspetti che accada, ma per un'analisi, rappresentare "token" come una sequenza può essere "sbagliato", poiché in genere dividi i token in una regione consumata / impegnata e in una regione di lookahead.
Nota anche che in genere non vuoi che "iterare su una sequenza" abbia effetti collaterali.