Что приводит к повторному перечислению последовательности F #?

StackOverflow https://stackoverflow.com/questions/604051

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть синтаксический анализатор, который фактически представляет собой набор рекурсивных функций, работающих с последовательностью токенов lexer.

Проблема, с которой я сталкиваюсь, заключается в том, что последовательность, похоже, перезапускается с самого начала при вызовах рекурсивных функций.Дано следующее базовое определение функции 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 заканчивается в начале последовательности.

Есть какие-нибудь идеи о том, как сохранить последовательность в нужном положении?

тиа

Это было полезно?

Решение

Я думаю, вам, возможно, придется опубликовать фрагмент чуть большего размера, поскольку я не совсем вас понимаю.

Тем не менее, последовательность (IEnumerable) - это просто последовательность, и каждый раз, когда вы for (foreach) или Seq.Независимо от того, что над ней, она будет "повторять итерацию" последовательности.Мне неясно, что вы хотите сделать и чего вы ожидаете, но для синтаксического анализа представление "токенов" в виде последовательности может быть "неправильным", поскольку вы обычно разделяете токены на потребляемую / зафиксированную область и область ожидания.

Обратите также внимание, что обычно вы не хотите, чтобы "повторение последовательности" приводило к побочным эффектам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top