Здравствуйте, vdimas, Вы писали:
I>>То есть, поскольку C# не умеет такую рекурсию иначе как через Y-комбинатор, следствием является отсутствие внятного реализации CTE.
V>C# умеет обычную рекурсию, этого достаточно.
У тебя не получается эту достаточность продемонстрировать.
I>>То есть, все просто — никто не хочет мучиться, выписывая непойми что.
V>А вот так нет:
V>V> Func<int, int> foo = null;
V> foo = (int k) => {
V> return k == 1 ? 1 : k + foo(k - 1);
V> };
V>
V>Хотя видно, что вызова лямбды нет до окончания определения переменной.
Вот я могу такой код писать
return source.Where(x=>SomeFilter(x)).Select(x=>SomeProjector(x))
Как твоим методом добавить сюда рекурсивные вызовы ? Не надо тянуть сюда Y-комбинатор, мы уже выяснили, что он плох.
V>Linq генерит теля лямбд.
V>САМ!
V>Хреново генерит.
V>И так во многом в C#.
Может тебе определиться, откуда растут проблемы с рекурсей, из Линка или C#. У тебя, похоже, ответ от настроения зависит. Но если ты настаиваешь, что причины в C#, то я согласен и можно заканчивать.
V>Взять даже банальные IReadOnlyDictionary<>, IReadOnlyollection<>.
V>Не прошло и 10-ти лет как выяснилось, что нужны были именно они в кач-ве интерфейсов, а не IDictionary и не ICollection, которые теперь как гиря на ногах.
Разумеется, все это время менялось понимание парадигдмы.
I>>То есть, тебе понятно, что причина не в LINQ, а в компиляторе ?
V>То есть ты ерунду продолжаешь говорить, сорри.
V>Я уже всё показал, вроде бы.
"И так во многом в C#." @ vdimas
Если это всё, ты пока ничего не показал.