On Saturday, 9 May 2015 at 14:47:21 UTC, Russel Winder wrote:
On Sat, 2015-05-09 at 07:15 -0700, Ali Çehreli via
Digitalmars-d-learn wrote:
On 05/09/2015 04:59 AM, Dennis Ritchie wrote:
> On Saturday, 9 May 2015 at 11:49:48 UTC, Timon Gehr wrote:
> > assert((function int(int
> > x)=>x?x*__traits(parent,{})(x-1):1)(10)==3628800);
>
> Thanks. Yes, it is similar to what I wanted :)
Also interesting:
http://rosettacode.org/wiki/Y_combinator#D
I think that code was improved by Timon Gehr as well.
Ali
Sadly all the solutions are unsound since they are recursive
but not
tail recursive. Oh it doesn't matter as D doesn't have tail call
optimization.
There are lots of good imperative implementations.
Of course none of the implementation can calculate
factorial(24) as
they are using hardware values which are bounded and cannot
store
reasonable numbers.
Could use iota. Oh no we can't as BigNums are not integral.
you could probably use sequence, or even recurrence.