Golfed fixed point combinator Write a fixed point combinator in as few characters as possible, in the language of your choice.


free form (i.e., whatever's shortest): whole program, actual function, code snippet
you may not use your standard library's if it has one
you may however extract it from other high-level functions it you'd rather do that than construct it from the bases


Please include a recursive factorial or Fibonacci that uses it as a demo.

In this question, self-reference is acceptable, the aim is solely to remove it from the recursive function it will apply to.
Haskell: 10 characters

y f=f$y f


Example of use to create recursive definitions of factorial or nth-Fibonacci:

&gt; map ( y(\f n-&gt;if n &lt;= 1 then 1 else n*f(n-1)) ) [1..10]
[1,2,6,24,120,720,5040,40320,362880,3628800]

&gt; map ( y(\f n-&gt;if n &lt;= 1 then 1 else f(n-1)+f(n-2)) ) [0..10]
[1,1,2,3,5,8,13,21,34,55,89]


Though, a more common way to use y would be to generate these sequences directly, rather than as functions:

&gt; take 10 $ y(\p-&gt;1:zipWith (*) [2..] p)
[1,2,6,24,120,720,5040,40320,362880,3628800]

&gt; take 11 $ y(\f-&gt;1:1:zipWith (+) f (tail f))
[1,1,2,3,5,8,13,21,34,55,89]


Of course, with Haskell, this is a bit like shooting fish in a barrel! The Data.Function library has this function, called fix, though implemented somewhat more verbosely.