导致F#序列重新枚举的原因是什么?

时间:2009-03-02 21:22:51

标签: f# sequences

我有一个解析器,它实际上是一组在词法分析器令牌上运行的递归函数。

我遇到的问题是序列似乎从递归函数调用开始重新启动。给出函数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

功能parse_token可能会调用Parse

然而,当发生这种情况时,参数tokens最终位于序列的开头。

关于如何将序列保持在需要的位置的任何想法?

TIA

1 个答案:

答案 0 :(得分:2)

我认为您可能需要发布一个稍微大一点的片段,因为我不太关注您。

也就是说,一个序列(IEnumerable)只是 - 一个序列,每次你(foreach)或Seq.Whatever它,它将“重新迭代”序列。我不清楚你想做什么,以及你期望发生什么,但对于解析,将'标记'表示为序列可能是'错误的',因为你通常将标记分为消耗/提交区域和前瞻区域。

另请注意,您通常不希望“迭代序列”产生副作用。