O que provoca uma # sequência F para reenumere?
Pergunta
Eu tenho um analisador que é efetivamente um conjunto de funções recursivas que operam em uma seqüência de tokens lexer.
O problema que eu estou correndo em é que a seqüência parece reiniciar a partir do início em chamadas de função recursiva. Dada a seguinte definição de esqueleto para a função 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
A função parse_token
pode resultar em uma chamada em Parse
.
No entanto, quando isso acontece, as extremidades parâmetro tokens
-se posicionado no início da sequência.
Algumas ideias sobre como manter a seqüência posicionado onde ele precisa ser?
tia
Solução
Eu acho que você pode precisar para postar um trecho um pouco maior, como eu não estou bastante seguir você.
Dito isso, uma sequência (IEnumerable) é apenas isso - uma seqüência, e cada vez que você for (foreach) ou Seq.Whatever sobre ele, ele vai 'reiterar' a seqüência. Eu sou claro o que você quer fazer, eo que você espera que aconteça, mas para uma análise, que representam 'fichas' como uma seqüência pode ser 'errado', como você normalmente fichas partição em um consumido / região comprometida e uma região lookahead.
Note também que você normalmente não querem 'iteração sobre uma seqüência' para ter efeitos colaterais.