| |
| Posted by Ali Çehreli | PermalinkReply |
|
Ali Çehreli
| Her zaman olduğu gibi Türkiye saati ama ilk defa olarak 11:00...
Bu arada, çok geç öğrendiğime göre, Türkiye'de saatler : ile değil . ile gösteriliyormuş. Acaba artık biliyorum diye 11.00 mı yazmalıyım yoksa öğrenmemişim gibi 11:00 mı? :)
Benden iki konu:
- D'ye yeni eklenmekte olan ImportC. Bir meetup için hazırladığım denemeleri gösteririm.
- D'nin aralıkları .save() ile ForwardRange olarak kullanıldığında işlemler beklenmedik biçimde birden fazla kere işletilebilir.
import std.stdio;
import std.algorithm;
import std.range;
void main() {
size_t hesapAdedi = 0;
auto r = iota(5)
.map!((i) {
// writeln(i, " için hesaplanıyor");
++hesapAdedi;
return i;
})
.slide(2);
writefln("%-(%s%)", r);
writeln("Hesap adedi: ", hesapAdedi);
}
Yukarıdaki programdaki .slide(2), "sliding window" anlamına geliyor ve elemanları bu örnekte ikişer ikişer gezmeye yarıyor. Elemanlar 0..4 aralığında olduğundan, genişliği 2 olan kayan pencereler şu elemanları gösterecekler: önce 0 ve 1, sonra 1 ve 2, vs. Bu pencereleri programın çıktısında görüyoruz:
[0, 1][1, 2][2, 3][3, 4]
Hesap adedi: 8
Ancak, toplam 5 eleman ve 4 pencere için 8 kere hesap işletilmesi şaşırtıcı gelebilir.
Bunun önüne geçmeye çalışan bir .cached() aralığı yazmaya çalışıyorum. Onu araya sıkıştırınca işlemler kaydedildikleri yerden kullanılacaklar:
auto r = iota(5)
.map!((i) {
// writeln(i, " için hesaplanıyor");
++hesapAdedi;
return i;
})
.cached // <-- Burada
.slide(2);
Bu konu üzerinde konuşabiliriz.
Ali
|