Хитрость заключается в том, чтобы выбрать первого ребенка, когда он также является последним ребенком 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
Вот один из таких сценариев: вы хотите создать библиотеку синтаксического анализа (хороший пример встроенного DSL) и обнаруживаете, что лучшими из них являются библиотеки монадических комбинаторов синтаксического анализа. Таким образом, вы пишете его, используя сахар синтаксиса LINQ для создания кода C #, который имеет ту же структуру, что и грамматика языка, который вы анализируете, и вы получаете преимущества потрясающей модели программирования для семантического анализа на лету и восстановления ошибок. , См. Описание в этом блоге .
Вот один из таких сценариев: вы хотите написать код, который выполняет последовательные асинхронные вызовы (например, ввод-вывод) без удержания потоков, но вы не хотите писать безнадежный клубок спагетти, который асинхронный модель программирования (BeginFoo / EndFoo) вынуждает вас использовать. Таким образом, вы можете использовать монаду и LINQ-сахара и писать код, который выглядит прямолинейным, но при этом освобождает / переключает потоки. См. этот блог для краткого описания.
LINQ используется во многих решениях (и часто запрашивается в вопросах) здесь, в StackOverflow. Просмотрите вопросы с тегом LINQ , и вы увидите его использование в реальном мире.
Программирование с помощью монад является декларативным, описывая то, что вы хотите, на высоком уровне, а не на низкоуровневых деталях того, как это сгенерировать.
См. упражнения в конце из выступления Брайана Бекмана о монаде состояний на канале 9 .
Найти пифагорейские тройки:
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 };