Здравствуйте, Ikemefula, Вы писали:
I>Expression это определенные ограничения, которые позволяют легко транслировать код и одновременно внятный конвеншн для сообщества.
Чего-чего? ))
А можно попунктно по-русски, чтобы было на что предметно отвечать?
I>Кроме того, лямбда это упрощенный синтаксис и связывание по месту требования.
Только не "требования, связываемые по месту", а переменные или их значения (для иммутабельных языков это одно и то же).
В общем случае это называется
замыканием.
Т.е. анонимные лямбды уместы только там, где на такое замыкание не надо ссылаться по имени.
Соответственно, Y-комбинатор является костылём для тех языков, в которых
замыкания могут быть только анонимными.
Но в C# замыканиям можно давать имя.
Поэтому, Y-костыль в C#
не нужен.
I>Есть тут имя или нет, дело абсолютно десятое.
Вообще-то, присвоёние сущностям символических имён времени компиляции — это основа основ языков программирования.
Просто разные языки обладают разными возможностями.
Например, языки, в которых Y-комбинатор необходим, — они обязательно умеют "раскрывать" тела лямбд, иначе вся затея превращается в тыкву.
C# не умеет инлайнить тела делегатов, поэтому для него злоупотребление такой техникой является банальной глупостью. Невежеством.
I>Но вот для рекурсии все становится иначе — и все ради этого самого экспрешна, что бы легко было анализировать, транслировать, выводить тип и тд и тд.
И вывод типов в C# лучше работает для неаонимных замыканий.
V>>Ты глаза-то открой, все подробности спрятаны за неименованой ламбдой.
I>У тебя стейтмент торчит снаружи
Еще раз — стейтмент в том примере спрятан внутри лямбды.
I>а значит надо писать мануал, какие стейтменты можно/нельзя использовать, и отдельно описать присваивания.
Не надо.
I>С экспрешном ничего такого делать не надо.
Глупости.
Non-pure ф-ии в C# не отличимы от pure, поэтому эти два кейза неотличимы.
I>>>Зачем же ты раз за разом приводишь примеры тех самых простынь ?
V>>Привёди пример короче или слил.
I>Алё! С текущей версией языка ничего лучше недоступно — об чем и речь.
Т.е. слил?