Рекурсивное лямбда-выражение для обхода дерева в C#

Правильным решением, и даже recursive идиоматическим решением во c#.net многих языках функционального csharp программирования, было бы generic-lambda использование fixed-point combinator. В двух словах: комбинатор recursion с фиксированной точкой отвечает lambdaexpression на вопрос «как определить .cs-file рекурсивность анонимной функции?». Но lambdaexpression решения настолько нетривиальны, что generic-lambda для их объяснения пишутся lambda-functions целые статьи.

Простая, прагматичная .cs-file альтернатива — «вернуться lambda-functions в прошлое» к выходкам C: объявление recursion перед определением. Попробуйте recursion следующее (функция «факториал»):

Func fact = null;
fact = x => (x == 0) ? 1 : x * fact(x - 1);

Работает .cs-file как шарм.

Или, для обхода lambda дерева предварительного порядка c#-language на объекте класса TreeNode, который lambdaexpression реализует IEnumerable соответствующим lambda-functions образом для обхода своих recursion дочерних элементов:

Action> preorderTraverse = null;
preorderTraverse = (node, action) => {
    action(node);
    foreach (var child in node) preorderTraverse(child, action);
};

c#

recursion

lambda

2022-08-30T17:44:20+00:00
Вопросы с похожей тематикой, как у вопроса:

Рекурсивное лямбда-выражение для обхода дерева в C#