ما يسبب # تسلسل F لإعادة ترتيب؟
سؤال
ولدي محلل التي هي في الواقع مجموعة من الوظائف متكررة تعمل على سلسلة من الرموز 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) ليست سوى ذلك - تسلسل، وفي كل مرة كنت ل(foreach) أو Seq.Whatever أكثر من ذلك، فإنه سيتم "إعادة أعاد 'التسلسل. أنا غير الواضح ما تريد القيام به، وماذا تتوقع أن يحدث، ولكن لتحليل، قد تكون تمثل "الرموز" كتسلسل 'الخطأ'، كما تفعل عادة الرموز القسم إلى منطقة المستهلكة / ملتزمة ومنطقة lookahead.
ملحوظة أيضا التي عادة لا يريدون "بالتكرار عبر سلسلة 'أن يكون من الآثار الجانبية.