iota and BigInt
Walter Bright
newshound2 at digitalmars.com
Tue May 28 01:46:14 PDT 2013
On 5/28/2013 1:32 AM, Jonathan M Davis wrote:
> 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
>
Please enter this into Bugzilla.
More information about the Digitalmars-d
mailing list