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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top