Каков востребованный сценарий для использования Монад в C#

Хитрость заключается в том, чтобы выбрать первого ребенка, когда он также является последним ребенком nth от последнего. Это эффективно выбирает на основе количества братьев и сестер.

    li:first-child:nth-last-child(8),
    li:first-child:nth-last-child(8) ~ li{
        background-color: $primary-accent;
        color: white;
        padding: 10px;
        border: 1px solid white;
    }

Кредиты: http://andr3.net/blog/post/142

21
задан Kevin Won 15 May 2009 в 03:53
поделиться

6 ответов

Вот один из таких сценариев: вы хотите создать библиотеку синтаксического анализа (хороший пример встроенного DSL) и обнаруживаете, что лучшими из них являются библиотеки монадических комбинаторов синтаксического анализа. Таким образом, вы пишете его, используя сахар синтаксиса LINQ для создания кода C #, который имеет ту же структуру, что и грамматика языка, который вы анализируете, и вы получаете преимущества потрясающей модели программирования для семантического анализа на лету и восстановления ошибок. , См. Описание в этом блоге .

11
ответ дан 29 November 2019 в 21:38
поделиться

Вот один из таких сценариев: вы хотите написать код, который выполняет последовательные асинхронные вызовы (например, ввод-вывод) без удержания потоков, но вы не хотите писать безнадежный клубок спагетти, который асинхронный модель программирования (BeginFoo / EndFoo) вынуждает вас использовать. Таким образом, вы можете использовать монаду и LINQ-сахара и писать код, который выглядит прямолинейным, но при этом освобождает / переключает потоки. См. этот блог для краткого описания.

4
ответ дан 29 November 2019 в 21:38
поделиться
3
ответ дан 29 November 2019 в 21:38
поделиться

LINQ используется во многих решениях (и часто запрашивается в вопросах) здесь, в StackOverflow. Просмотрите вопросы с тегом LINQ , и вы увидите его использование в реальном мире.

0
ответ дан 29 November 2019 в 21:38
поделиться

Программирование с помощью монад является декларативным, описывая то, что вы хотите, на высоком уровне, а не на низкоуровневых деталях того, как это сгенерировать.

См. упражнения в конце из выступления Брайана Бекмана о монаде состояний на канале 9 .

0
ответ дан 29 November 2019 в 21:38
поделиться

Найти пифагорейские тройки:

  var r = from a in Enumerable.Range(1, 25)
          from b in Enumerable.Range(a, 25-a)
          from c in Enumerable.Range(b, 25-b)
          where a*a + b*b == c*c
          select new [] { a, b, c };
5
ответ дан 29 November 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: