Здравствуйте, Ikemefula, Вы писали:
V>>Даже не берясь судить, что Алекс имел ввиду, его утверждение является истинной.
I>Это блеск!
Это как "устами младенца ..." и далее про тексту.
Так бывает.
I>>>Покажи код, как без Y-комбинатора писать рекурсию в лямда-выражениях.
V>>Я правильно понял твой вопрос, что ты хочешь посмотреть на некий гипотетический синтаксис выражений linq и соотв. сгенерённый компилятором объект-замыкание?
I>Нет, конечно.
Тогда ты тоже лишь бесполезно трепешься.
I>Я говорю о фактическом положении дел и о причинно-следственных связях.
Без обсуждения технических подробностей, это примерно как лбом об пол возле иконы стучать.
Можешь стучать сколь угодно громко, толку будет ноль.
I>То есть, поскольку C# не умеет такую рекурсию иначе как через Y-комбинатор, следствием является отсутствие внятного реализации CTE.
C# умеет обычную рекурсию, этого достаточно.
С++ тоже умеет, поэтому рекурсивная лямбда на ём тривиальна:
std::function<int (int)> foo = [&foo](int k) {
return k == 1 ? 1 : k + foo(k-1);
};
I>То есть, все просто — никто не хочет мучиться, выписывая непойми что.
И что тебе непонятно в этой записи?
Func<int, int> foo = (int k) => {
return k == 1 ? 1 : k + foo(k-1);
};
Компилятор тут ругается.
А вот так нет:
Func<int, int> foo = null;
foo = (int k) => {
return k == 1 ? 1 : k + foo(k - 1);
};
Хотя видно, что вызова лямбды нет до окончания определения переменной.
I>И причина никак не в Linq.
Не отмазывайся. ))
Linq генерит теля лямбд.
САМ!
Хреново генерит.
И так во многом в C#.
Взять даже банальные IReadOnlyDictionary<>, IReadOnlyollection<>.
Не прошло и 10-ти лет как выяснилось, что нужны были именно они в кач-ве интерфейсов, а не IDictionary и не ICollection, которые теперь как гиря на ногах.
V>>Там чёрным по-белому написано ради чего — посмотреть, насколько это практично.
V>>Из-за двух лишних уровней косвенности описания, делающих невозможным автовывод типа делегата — получается абсолютно не практично.
I>То есть, тебе понятно, что причина не в LINQ, а в компиляторе ?
То есть ты ерунду продолжаешь говорить, сорри.
Я уже всё показал, вроде бы.