www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Take and website

reply 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
next sibling parent 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
prev sibling parent reply 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
parent reply 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
next sibling parent reply 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
next sibling parent reply 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
next sibling parent 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
prev sibling parent 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
prev sibling parent =?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
prev sibling parent 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