KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've spent some time wrapping my head around the Y combinator lately, and I've found that it is usually defined (more or less) as follows (this is in C#, but the language of choice isn't important): public delegate TResult SelfApplicable<TResult>(SelfApplicable<TResult> r); public static TResult U<TResult>(SelfApplicable<TResult> r) { return r(r); } public static Func<TArg1, TReturn> Y<TArg1, TReturn>(Func<Func<TArg1, TReturn>, Func<TArg1, TReturn>> f) { return U<Func<TArg1, TReturn>>(r => arg1 => f(U(r))(arg1)); } While that's perfectly functional (pun intended), it would seem that my definition is much simpler: public static Func<TArg1, TReturn> Y<TArg1, TReturn>(Func<Func<TArg1, TReturn>, Func<TArg1, TReturn>> f) { return f(n => Y(f)(n)); } Is there any reason why the latter definition is not as common (I have yet to find it on the net)? Would it perhaps have something to do with defining Y in terms of itself?
Tags (comma-separated)
Save Edits
Cancel