Thread overview
"Sondan dördüncü" anlamında retro[3]
Nov 21, 2012
Salih Dinçer
November 20, 2012

İlk gördüğümde bana garip gelen bir kullanım:

import std.stdio;
import std.range;
import std.algorithm;

void main()
{
   iota(0, 10).map!(x => x * x).retro[3].writeln;
}

Oradaki 'retro[3]' bana bilmediğim özel bir kullanımmış gibi gelmişti. Ama aslında .retro'nun döndürdüğü RandomAccessRange aralığına uygulanan bildiğimiz '[]' işleci...

Yukarıdaki satırın Türkçesi: Sıfırdan ona kadar olan sayıların karelerinin sondan dördüncüsünü yazdır. Çıktısı:

'36'

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 21, 2012

Bence 'retro()' kullanmak işleri karıştırıyor...

Çünkü aralıktaki eleman sayısı iki katına çıkardığımızda, 4. elemana ulaşmak için hesap yapma gerekliliğini doğuruyor. Bunun yerine şu şekilde kullanım daha doğru olsa gerek:

// [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
assert(iota(0, 20).map!(x => x * x)[$-4] == 256); //-------------------^

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 21, 2012

Çok daha güzel. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]