Для получения полного доступа
зарегистрируйтесь.
RSS

Все сниппеты с тэгом «lambda»



Сниппет,  C++

Recursive C++ Lambda

Gravatar image
iqbotan
  • Репутация: 2
  • Сниппеты: 1
  • Ревизии: 0

Примеры использования

Создание рекурсивных лямбд с помощью Y-комбинатора. Лямбды должны быть полиморфными (хотя бы один аргумент лямбды должен иметь тип auto). Возвращаемый тип лямбды должен выводиться без использования функции NAME (в примерах это g). В примере factorial возвращаемый тип выводится из первого return. В примере fibonacci возвращаемый тип указан явно.

auto Y_ = [](auto h) {
	return ([](auto f) { return f(f); })
	([h](auto f) {
		return h([f](auto ... n) {
			return f(f)(n...);
		});
	});
};

#define REC(NAME, FUN) Y_([](auto NAME){ return [NAME] FUN;})

// EXAMPLE: fibonacci number
auto fib = REC(g,
	(auto n) -> int {
		return n > 1 ? g(n - 1) + g(n - 2) : n;
	}
);
Gravatar image
beliy26
  • Репутация: 1
  • Сниппеты: 1
  • Ревизии: 0

Генерация последовательности с заданным условием

 private static IEnumerable<int> GetNumber(int startValue,Func<int,int> func )
        {
            var nextValue = startValue;
            while (true)
            {
                yield return nextValue;
                nextValue = func(nextValue);
            }
        }
var x = GetNumber(1, i => i + 1).Where(i=>i%2==0).Take(100).ToList();