функциональный подход в решении насущной задачи
От: Аноним  
Дата: 13.04.10 12:30
Оценка:
Здравствуйте.

Есть небольшая задачка. Имеется строка текста, которую нужно разобрать, т.е. осуществить преобразование: строка -> объект определенного типа. Этот объект включает в себя всевозможную информацию, которая может быть выбрана из этой строки. Существует набор правил в виде регулярных выражений, которые и определяют содержимое этой строки. Правил может быть много, и они могут добавляться со временем. Сейчас используется такой подход — большая цепочка if else, в которых последовательно применяется каждое регулярное выражение (правило) к исходной строке, и если результат успешный, то в этом блоке производится выборка соответствующих текстовых полей из регулярного выражения, приведение к определенному типу (число, дата, т.п.) и изменение соотвествующего поля в объекте (который в конечном итоге и возвращается как результат), а если результат неуспешный — то переход к следующему if else. Получается как-то длинно и некрасиво. Возможно ли как-то улучшить подход, применяя функциональные возможности в последних версиях C#? Ведь по идее правило можно представить не в виде регулярного выражения, а в виде функции, которая принимает строку, а возвращает (применив регулярное выражение и выбрав из текста нужные параметры) какое-то значение. Точнее тип возвращаемого значения должен включать и неудачу (когда применение регулярного выражения выдало false). Т.е. это получается Maybe-вычисление. А потом такие правила можно комбинировать... И неужели в результате получаются монадные вычисления? Помогите, направьте на путь истинный, не ошибся ли я в своих рассуждениях, дайте совет по реализации.
Re: функциональный подход в решении насущной задачи
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 13.04.10 17:11
Оценка:
Да, монады тут к месту, а особенно напрашиваются парсер-комбинаторы. В данном случае можно даже применить оптимизирующие, получив линейное время разбора. Подробности (не на C#, правда) тут. В апрельском номере ПФП ожидается статейка на эту тему.
Re: функциональный подход в решении насущной задачи
От: achmed Удмуртия https://www.linkedin.com/in/nail-achmedzhanov-9907188/
Дата: 17.04.10 13:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте.


А> ..... Возможно ли как-то улучшить подход, применяя функциональные возможности в последних версиях C#? Ведь по идее правило можно представить не в виде регулярного выражения, а в виде функции, которая принимает строку, а возвращает (применив регулярное выражение и выбрав из текста нужные параметры) какое-то значение. Точнее тип возвращаемого значения должен включать и неудачу (когда применение регулярного выражения выдало false). Т.е. это получается Maybe-вычисление. А потом такие правила можно комбинировать... И неужели в результате получаются монадные вычисления? Помогите, направьте на путь истинный, не ошибся ли я в своих рассуждениях, дайте совет по реализации.


Monadic Parser Combinators using C# 3.0
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.