## digitalmars.D - Take and website

Russel Winder <russel winder.org.uk> writes:
```I am wondering if the examples at
http://dlang.org/phobos/std_range.html#take need some attention. As far
as I can see they only work because the input is a list. If you take
from the result of an algorithm such as recurrence then you have to
explicitly create an array from the result of the take in order for the
[] operator to be defined.

--=20
Russel.
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D
Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder ekiga.n=
et
41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel winder.org.uk
London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder
```
Jul 24 2012
Walter Bright <newshound2 digitalmars.com> writes:
```On 7/24/2012 10:10 AM, Russel Winder wrote:
I am wondering if the examples at
http://dlang.org/phobos/std_range.html#take need some attention. As far
as I can see they only work because the input is a list. If you take
from the result of an algorithm such as recurrence then you have to
explicitly create an array from the result of the take in order for the
[] operator to be defined.

I don't know about that specifically, but I've been trying to do some range
based programs and have found that Phobos in general needs to be gone through
and "range-ified".

Ranges are a huge deal for D, perhaps even a killer feature, and Phobos ought
to
be a showcase for them (like STL is for C++).

(Why a killer feature? Ranges make "snap together" component programming
actually work in D.)
```
Jul 24 2012
Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
```On 7/24/12 1:10 PM, Russel Winder wrote:
I am wondering if the examples at
http://dlang.org/phobos/std_range.html#take need some attention. As far
as I can see they only work because the input is a list. If you take
from the result of an algorithm such as recurrence then you have to
explicitly create an array from the result of the take in order for the
[] operator to be defined.

The example is:

int[] arr1 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
auto s = take(arr1, 5);
assert(s.length == 5);
assert(s[4] == 5);
assert(equal(s, [ 1, 2, 3, 4, 5 ][]));

Were you referring to this? Example code does not need to be generic,
and in this case it's fine if the code relies on random access because
it uses an array of integers.

Andrei
```
Jul 24 2012
Russel Winder <russel winder.org.uk> writes:
```On Tue, 2012-07-24 at 13:56 -0400, Andrei Alexandrescu wrote:
[=E2=80=A6]
The example is:
=20
int[] arr1 =3D [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
auto s =3D take(arr1, 5);
assert(s.length =3D=3D 5);
assert(s[4] =3D=3D 5);
assert(equal(s, [ 1, 2, 3, 4, 5 ][]));
=20
Were you referring to this? Example code does not need to be generic,=20
and in this case it's fine if the code relies on random access because=

=20
it uses an array of integers.

That's the one.

s[4] relies on the fact that arr1 is an array:

( takeExactly ( recurrence ! ( "a[n-1] + a[n-2]" ) ( 0L , 1L ) , cast
( size_t ) ( n + 1 ) ) ) [ n ]

fails with operator [] not defined, I find I have to:

array ( takeExactly ( recurrence ! ( "a[n-1] + a[n-2]" ) ( 0L , 1L ) ,
cast ( size_t ) ( n + 1 ) ) ) [ n ]=20

So the functions available on the results of a take depends on the data
input. In one sense obvious, in another sense a total fubar since it is
not necessarily clear what the types are in more complex situations.

--=20
Russel.
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D
Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder ekiga.n=
et
41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel winder.org.uk
London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder
```
Jul 24 2012
Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
```On 7/24/12 2:17 PM, Russel Winder wrote:
That's the one.

s[4] relies on the fact that arr1 is an array:

( takeExactly ( recurrence ! ( "a[n-1] + a[n-2]" ) ( 0L , 1L ) , cast
( size_t ) ( n + 1 ) ) ) [ n ]

fails with operator [] not defined, I find I have to:

array ( takeExactly ( recurrence ! ( "a[n-1] + a[n-2]" ) ( 0L , 1L ) ,
cast ( size_t ) ( n + 1 ) ) ) [ n ]

So the functions available on the results of a take depends on the data
input. In one sense obvious, in another sense a total fubar since it is
not necessarily clear what the types are in more complex situations.

I must have gotten a bit too used to it, but I think that's quite a
basic reality imposed by the types involved... yes, that's as clear as
xyz = 4.5 only works if xyz is of some certain types.

Anyhow, an example that shows how to print the nth Fibonacci number will
be helpful. Could I impose on you to write a pull request?

Thanks,

Andrei
```
Jul 24 2012
Russel Winder <russel winder.org.uk> writes:
```On Tue, 2012-07-24 at 14:21 -0400, Andrei Alexandrescu wrote:
[=E2=80=A6]
I must have gotten a bit too used to it, but I think that's quite a=20
basic reality imposed by the types involved... yes, that's as clear as=

=20
xyz =3D 4.5 only works if xyz is of some certain types.

I think the point here is that the type of the underlying data structure
passes through the various "wrappers". This definitely is not a problem
as long as it is clear to the programmer. The current examples are fine
but just not giving wide enough coverage to make this point.

Anyhow, an example that shows how to print the nth Fibonacci number will=

=20
be helpful. Could I impose on you to write a pull request?

Having raised the issue, I am duty bound to deliver :-) But it may take
a while. Not Deep Though type "a while", but a few days.

Is the website documentation generated from the Phobos source or is it a
separate  repository? (He says giving away his green-ness at the D
community infrastructure!)

--=20
Russel.
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D
Dr Russel Winder      t: +44 20 7585 2200   voip: sip:russel.winder ekiga.n=
et
41 Buckmaster Road    m: +44 7770 465 077   xmpp: russel winder.org.uk
London SW11 1EN, UK   w: www.russel.org.uk  skype: russel_winder
```
Jul 24 2012
Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
```On 7/24/12 2:47 PM, Russel Winder wrote:
On Tue, 2012-07-24 at 14:21 -0400, Andrei Alexandrescu wrote:
[â€¦]
I must have gotten a bit too used to it, but I think that's quite a
basic reality imposed by the types involved... yes, that's as clear as
xyz = 4.5 only works if xyz is of some certain types.

I think the point here is that the type of the underlying data structure
passes through the various "wrappers". This definitely is not a problem
as long as it is clear to the programmer. The current examples are fine
but just not giving wide enough coverage to make this point.

A fair point.

Anyhow, an example that shows how to print the nth Fibonacci number will
be helpful. Could I impose on you to write a pull request?

Having raised the issue, I am duty bound to deliver :-) But it may take
a while. Not Deep Though type "a while", but a few days.

http://i3.kym-cdn.com/photos/images/newsfeed/000/159/325/1262055260350.jpg

Is the website documentation generated from the Phobos source or is it a
separate  repository? (He says giving away his green-ness at the D
community infrastructure!)

Straight from the Phobos source. For a quick edit, just go straight here:

https://github.com/D-Programming-Language/phobos/edit/master/std/algorithm.d

Andrei
```
Jul 24 2012
Nick Sabalausky <SeeWebsiteToContactMe semitwist.com> writes:
```On Tue, 24 Jul 2012 19:47:42 +0100
Russel Winder <russel winder.org.uk> wrote:
Is the website documentation generated from the Phobos source or is
it a separate  repository? (He says giving away his green-ness at the
D community infrastructure!)

The Phobos documentation is generated from the Phobos source. The rest
of the website is in the d-programming-language.org repo.
```
Jul 24 2012
=?ISO-8859-1?Q?Jos=E9_Armando_Garc=EDa_Sancio?= <jsancio gmail.com> writes:
```On Tue, Jul 24, 2012 at 11:47 AM, Russel Winder <russel winder.org.uk> wrot=
e:
On Tue, 2012-07-24 at 14:21 -0400, Andrei Alexandrescu wrote:
[=85]
Is the website documentation generated from the Phobos source or is it a
separate  repository?

That particular example should be in the ddoc block for that
function/template in the source code. Those pages are automatically
generated using make and dmd.
```
Jul 24 2012
travert phare.normalesup.org (Christophe Travert) writes:
```Russel Winder , dans le message (digitalmars.D:173102), a écrit :

--=-aHxuwwF1pyt7fCGYFQXP
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, 2012-07-24 at 13:56 -0400, Andrei Alexandrescu wrote:
[=E2=80=A6]
The example is:
=20
int[] arr1 =3D [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
auto s =3D take(arr1, 5);
assert(s.length =3D=3D 5);
assert(s[4] =3D=3D 5);
assert(equal(s, [ 1, 2, 3, 4, 5 ][]));
=20
Were you referring to this? Example code does not need to be generic,=20
and in this case it's fine if the code relies on random access because=

=20
it uses an array of integers.

That's the one.

s[4] relies on the fact that arr1 is an array:

( takeExactly ( recurrence ! ( "a[n-1] + a[n-2]" ) ( 0L , 1L ) , cast
( size_t ) ( n + 1 ) ) ) [ n ]

fails with operator [] not defined, I find I have to:

This is expressed in the doc, not in the example:
If the range offers random access and length, Take offers them as
well.

recurrence does not offer random access, so take!recurrence does not.
You may try to make sentence this clearer, but it's pretty clear to me.

--
Christophe
```
Jul 25 2012