내 뇌가 매시 키즘 모드 인 것 같습니다. this, this 및 this에 익사 한 후 C#에서 DIY를 사용하고 싶었습니다.C# dynamic을 사용하여 Y-combinator를 구현했는데 그렇지 않은 경우 무엇입니까?
은 내가 이는 Y-콤비라고 생각하지 않습니다 다음, 함께했다,하지만 는 자체를 참조하지 않고, 비 재귀 함수의 재귀를 만들기 위해 관리 보인다 :
Func<Func<dynamic, dynamic>, Func<dynamic, dynamic>> Y = x => x(x);
는 그래서이 주어진 :
Func<dynamic, Func<dynamic, dynamic>> fact =
self => n => n == 0 ? 1 : n * self(self)(n - 1);
Func<dynamic, Func<dynamic, dynamic>> fib =
self => n => n < 2 ? n : self(self)(n-1) + self(self)(n-2);
우리는 이것들을 생성 할 수 있습니다
Func<dynamic, dynamic> Fact = Y(fact);
Func<dynamic, dynamic> Fib = Y(fib);
Enumerable.Range(0, 10)
.ToList()
.ForEach(i => Console.WriteLine("Fact({0})={1}", i, Fact(i)));
Enumerable.Range(0, 10)
.ToList()
.ForEach(i => Console.WriteLine("Fib({0})={1}", i, Fib(i)));
오우, 내 뇌. 나는 내가 * 그것을 * 묻는 것 같아요 ... – Benjol
거기에 당신의 BTW에 정교 할 수있는 기회가 있습니까? 그것은 내 머리의 맨 위에 약간있다. (그러나 이것의 대부분은 ...) – Benjol
더 많은 고심에 감사드립니다 - 나는 call-by-value의 해석에 혼란스러워하고있었습니다. 방금 재귀 예제 ('Z = f => f (f (f (f)))는''내가 포함하는만큼 많은''f ''에 대해 작동 할 것입니다. 다음 단계 ... – Benjol