|WikiProject Computer science||(Rated C-class, Low-importance)|
How is this article not redundant with the Fixed point combinator article?
This one does't seem to add anything new and has very serious grammatical and markup problems.
In particular, the introductory paragraph is very hard to read, especially with overuse of "in terms of" and "-argument". The sentences are far too long -- more like a high-level journal article than an encyclopedia, and the function markup in the introduction doesn't display properly.
The example is good, but is very informal -- it needs to be more encyclopedic in tone.
The Y combinator section is just plain confusing -- the central point is ill-defined and the derivation is informal and unfocused. The metaphorical explanation at the end, especially, is misleading and unnecessary.
In short, flagging for cleanup.
--bmills 18:51, 2 November 2005 (UTC)
>>How is this article not redundant with the Fixed point combinator article?<<
- The introduction and the example are independent of the Y combinator: only the "Y combinator" section should overlap with the fixed point combinator article. The "Y combinator" section was attached as an afterthought, it is not really necessary for the article: only the top part is necessary (if this article should survive at all). This article offers a way of defining anonymous recursion which is alternative to using the Y combinator: the last section just shows how the two approaches are related. —AugPi 20:10, 2 November 2005 (UTC)
- The article basically describes the encoding of recursive functions as functions which take themselves as arguments. Such an encoding is how one writes a function to be made recursive with a fixed point operator, although generally in lambda calculus encodings the function is the first argument rather than the second. The only real difference between the kind of encoding described here and use of a fixed point combinator is that the combinator automates the passing of f to itself -- this is why we have the λx. f (x x) term in the Y combinator. This seems to be the core idea of this article, although I'm not convinced that that idea can't be explained more clearly in a succinct paragraph in fixed point combinator. --bmills 16:31, 8 November 2005 (UTC)
>> the function markup in the introduction doesn't display properly<<
- True: I have converted it to TeX. —AugPi 20:29, 2 November 2005 (UTC)
>>The metaphorical explanation at the end, especially, is misleading and unnecessary.<<
- Yes: it goes off in a tangent. I have removed it. —AugPi 20:31, 2 November 2005 (UTC)
What does "anonymous" mean in this context? Michael Hardy 03:55, 15 November 2005 (UTC)
- I'm not an expert in these mattres, but I think the "anonymous" in "anonymous recursive function" means that it doesn't need to have a name assigned. I gather it's okay to take it litterally. ("anonymous" < Greek: an- "without" + onyma, Æolic dialectal form of onoma "name", thus "without a name", "nameless", "unnamed")
- For instance, λx(x + 2) is an anonymous function. You can write down stuff like (λx(x + 2))3 and the result is 5.
- However, if you want to define a recursive function, you would have to name it to be able to write down things like f(x) = ...f(x - 1)... This article shows that you can actually define anonymous recursive functions without naming them. Everything clear? Shinobu 03:51, 2 March 2006 (UTC)
- It's not well defined concept as far as I can tell. See Talk:First-class_function#Merge_anonymous_function_here. Pcap ping 01:19, 21 August 2009 (UTC)
The new function is also recursive!?
In the second, step, you define a new, recursive function, namely h. Now, instead of defining f by using f itself, you define h by using h itself, and passing around a dummy parameter f (that is not used at all in the function)
Besides the fact that anonymous function is not a well-defined concept, the construction given in this article uses names for functions; so how is this recursion anonymous?
- Update: Not well-defined in the context of lambda calculus and mathematics, see this rant; it is fairly well defined in programming, but this article tried to be too far removed from that.
This article appears to be the product of somebody with a poor understanding of lambda calculus, where functions are indeed anonymous, in that we don't need to give them names, you can just write well formed expressions in the calculus. But then this article is nothing more than an application of some fix-point combinator; whether it's Y or not, it doesn't really matter, because there's an infinity of fix-point combinators. Pcap ping 01:42, 21 August 2009 (UTC)
This whole article appears to be a rehashing of the Z combinator (see link above) which is needed in call-by-value languages, because Y loops forever there (only works in Haskell and other lazy evaluation or call-by-name languages). But this article is so far removed from explaining any of this that it's effectively a pointless mental exercise reading it, and totally redundant alongside Fixed point combinator. Did I mention this article cites no sources? Pcap ping 01:50, 21 August 2009 (UTC)
Literature survey and conclusion
This notion is virtually unheard of in print, but it does appear in two very recent C# books , as well as some MSDN blogs, e.g. . But note how the author of that blog concludes that he simply rediscovered the Y combinator! So, this is worth no more than a little mention in the fixed point combinator article. Pcap ping 18:03, 21 August 2009 (UTC)
Expand to full article
This article was previously a redirect (from merge) to fixed-point combinator. However, that is a very technical article with largely different subject, and in that context “anonymous recursion” is at best an occasional term, at worst an abuse of language.
I’ve accordingly expanded this page into a proper article – hope it looks good, and please improve it!
I came up with a simpler lambda calculus solution for factorial. All I did was take the anonymous recursion version, and replace "lambda a, b" with "lambda a: lambda b:", and "(a, b)" with "(a)(b)".
(lambda f: lambda x: f(f)(x)) \ (lambda f: lambda x: 1 if x == 0 else x * f(f)(x-1))
But, this is original research I guess, so I won't put it on the page. Also the existing explanation might help people trying to understand the Y combinator. — Preceding unsigned comment added by 188.8.131.52 (talk) 22:19, 27 April 2015 (UTC)