iota and BigInt
Jonathan M Davis
jmdavisProg at gmx.com
Tue May 28 01:32:25 PDT 2013
On Tuesday, May 28, 2013 08:55:10 Russel Winder wrote:
> Arising from a thread on the GoLangNuts email list, I wrote the
> following:
>
> import std.algorithm: reduce;
> import std.bigint;
> import std.range: iota;
> import std.stdio: writeln;
>
> int main(immutable string[] args) {
> foreach (int i; iota(10, 50, 10)) {
> writeln(reduce!"a * b"(BigInt(1), iota(BigInt(1),
> BigInt(i))));
> }
> return 0;
> }
>
> Sadly the compiler refuses to acknowledge that iota works for BigInt. My
> first assumption is that my code is wrong. My second assumption is that
> std.range doesn't work with real integers — as opposed to those pesky
> limited hardware things ;-)
The problem is simple enough. iota doesn't currently try and work with any
type that has addition (like it probably should). It specifically only works
with integers, floating point values, and pointers. BigInt is not an integral
type as far as std.traits is concerned. Only the built-in integer types are
integral types as far as it's concerned. What's required is a different trait
that tests that a type has arithmetic operations or for iota to simply test
that the type has + or += or whatever it needs internally. Then iota can have
an overload that works on any type that has the necessary operations.
- Jonathan m Davis
More information about the Digitalmars-d
mailing list