Bugüne kadar Aralıklar (http://ddili.org/ders/d/araliklar.html) üzerinde özel bir çalışma tertiplememiştim. Yani, ne lüzumu var şimdi canım, dedim kendi kendime; altı üstü belli bir sınır çerçevesinde tekrar eden elemanlar, hepsi o kadar...:)
Pekala dizilerle de yapabileceğimiz şeyler gibiydi; bu aralıklar benim içim. Ancak 'foreach()' ile uyumlu çalışması gerçekten hoş. Beraberinde koşut işlemler (parallelization) sınıfı std.parallelism ile işbirliği yapması da ilgi çekici. Özetle basit gibi görünse de çok işe yarar olduğu tartışılmaz.
Örneğin aşağıda, tek sayılar kümesi içinde asal sayıları tarayan bir kod görülmekte. Elbette bunu iç içe basit bir döngü ile yapabilirdik. Ancak sahip olduğu esnekliği düşününce, bundan sonra aralıkların bir çok yazdığım programda eksik olmayacağını söyleyebilirim:
import std.stdio;
class tekSayılarKümesi(T) {
T xSay;
size_t asallar = 0;
this (T başlangıç = 3) {
xSay = başlangıç;
if(başlangıç%2 == 0) xSay++;
}
bool empty() const {
return xSay == T.max;
}
T front() const {
return xSay;
}
void popFront() {
xSay += 2;
}
void asal_Mı(T p) {
bool asal = true;
for(T n = 3; n * n <= p; n+=2) {
if(p % n == 0) {
asal = false;
break;
}
}
if(asal) {
asallar++;
if(asallar%100_000 == 0) p.write();
//p.write("\t");
}
"\r".write;
}
}
void main() {
auto tekSayılar = new tekSayılarKümesi!uint;
foreach(i; tekSayılar) tekSayılar.asal_Mı(i);
writeln;
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]