Lambda functions in D
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat May 9 09:49:03 PDT 2015
On 05/09/2015 07:47 AM, Russel Winder via Digitalmars-d-learn wrote:
> 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.
I don't have experience with BigInt but the following worked:
import std.stdio;
import std.bigint;
import std.range;
import std.algorithm;
struct BigIntRange
{
BigInt front;
enum empty = false;
void popFront()
{
++front;
}
}
BigIntRange bigInts(long first = 0)
{
return BigIntRange(BigInt(first));
}
BigInt factorial(size_t n)
{
return bigInts(1).take(n).reduce!((a, b) => a *= b);
}
void main()
{
writeln(factorial(1000)); // prints many digits
}
Ali
More information about the Digitalmars-d-learn
mailing list