View mode: basic / threaded / horizontal-split · Log in · Help
January 16, 2013
Limited printing?
In Mathematica and NumPy (and other systems used with REPL) if 
you print a very large array you receive a shortened output. In 
Mathematica:

http://reference.wolfram.com/mathematica/tutorial/ShortAndShallowOutput.html

Mathematica uses a representation like (but on default it shows 
more items. There is a way to print them all):

Range[100]

{0, 1, 2, <<94>>, 97, 98, 99}


While numpy visualization is a bit simpler:

>>> from numpy import array
>>> array([0] * 10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
>>> array([0] * 10000)
array([0, 0, 0, ..., 0, 0, 0])


Currently In D this shows all the items:

writeln(iota(10_000));

Do you desire some way to have a shortened printing if the 
generated text is going to be huge?

Bye,
bearophile
January 16, 2013
Re: Limited printing?
On Wednesday, 16 January 2013 at 11:16:41 UTC, bearophile wrote:
> In Mathematica and NumPy (and other systems used with REPL) if 
> you print a very large array you receive a shortened output. In 
> Mathematica:
>
> http://reference.wolfram.com/mathematica/tutorial/ShortAndShallowOutput.html
>
> Mathematica uses a representation like (but on default it shows 
> more items. There is a way to print them all):
>
> Range[100]
>
> {0, 1, 2, <<94>>, 97, 98, 99}
>
>
> While numpy visualization is a bit simpler:
>
>>>> from numpy import array
>>>> array([0] * 10)
> array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
>>>> array([0] * 10000)
> array([0, 0, 0, ..., 0, 0, 0])
>
>
> Currently In D this shows all the items:
>
> writeln(iota(10_000));
>
> Do you desire some way to have a shortened printing if the 
> generated text is going to be huge?
>
> Bye,
> bearophile

writeln(iota(10_000).take(10)); ?
January 16, 2013
Re: Limited printing?
Nicolas Sicard:

> writeln(iota(10_000).take(10)); ?

You have missed the point. What if you have a [iota(10_000), 
iota(10_000)]?

Bye,
bearophile
January 16, 2013
Re: Limited printing?
On Wednesday, 16 January 2013 at 11:46:10 UTC, bearophile wrote:
> Nicolas Sicard:
>
>> writeln(iota(10_000).take(10)); ?
>
> You have missed the point. What if you have a [iota(10_000), 
> iota(10_000)]?

OK, but is there a simple and general way to tell how to skip 
elements for ranges other than sorted numeric ones?
January 16, 2013
Re: Limited printing?
On Wednesday, 16 January 2013 at 11:16:41 UTC, bearophile wrote:
> Do you desire some way to have a shortened printing if the 
> generated text is going to be huge?

I say no. IO isn't always for human consumption (as it usually is 
in Mathematica). You could very well be printing out as a means 
of serialisation, and you certainly don't want your data to be 
trimmed in that case.

For a systems programming language, consistency is absolutely 
critical.
January 16, 2013
Re: Limited printing?
Peter Alexander:

> I say no. IO isn't always for human consumption (as it usually 
> is in Mathematica). You could very well be printing out as a 
> means of serialisation, and you certainly don't want your data 
> to be trimmed in that case.

Mathematica and NumPy on default shorten the output if it's too 
much large, and show it all on request. What I forgot to say in 
my first post is that in D it's probably better to have those 
conditions swapped, this means printing all on default, and 
adding a way to produce a shorter output on request.

Bye,
bearophile
January 16, 2013
Re: Limited printing?
On Wednesday, 16 January 2013 at 14:05:03 UTC, bearophile wrote:
> Mathematica and NumPy on default shorten the output if it's too 
> much large, and show it all on request. What I forgot to say in 
> my first post is that in D it's probably better to have those 
> conditions swapped, this means printing all on default, and 
> adding a way to produce a shorter output on request.

A format specifier like this, then, adding width and/or 
"precision" to "%(":

writefln("%10.3(%s, %)", iota(10_000));
// Prints: "0, 1, 2, ... 7, 8, 9".

could be useful.
Top | Discussion index | About this forum | D home