2009-03-02 7 views
1

私は、事実上、一連のレクサートークンで動作する再帰関数のセットであるパー​​サを持っています。F#シーケンスを再列挙する原因は何ですか?

私が遭遇している問題は、シーケンスが再帰関数呼び出しの最初から再開しているようだということです。 Parseへの呼び出しをもたらすことができる機能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ために、以下のスケルトン定義を考えます。

しかし、この場合、パラメータtokensはシーケンスの先頭に配置されます。

シーケンスをどのように配置する必要がありますか?

TIA

答えて

2

は、私はあなたが私はかなりあなたをフォローしていないとして、大きめのスニペットを投稿する必要があるかもしれないと思います。

つまり、シーケンス(IEnumerable)はそれだけです。シーケンスであり、いつでも(foreach)またはSeq.Whateverのいずれかでシーケンスを '反復'します。私はあなたが何をしたいと思っているのか、何が起こるのかはっきりしていませんが、シーケンスとして 'トークン'を表す構文解析は、通常、トークンを消費/コミットされた領域と先読み領域に分割するので、間違っている可能性があります。

また、通常、「シーケンスを反復する」ことが副作用を持つことは望ましくありません。

+0

あなたは間違いありません。私は質問を掲示した後にそれを認識し、問題が何であるかを理解しました。私は間違ったアプローチだった共有IEnumeratorに相当するものを構築しようとしていました。私はリストの上にそれを構築し、消費されていない残りの部分を渡した。 – kolosy

関連する問題