Рекурсивное лямбда-выражение для обхода дерева в 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
Рекурсивное лямбда-выражение для обхода дерева в C#
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.