Dikkatlerinizi bir noktaya daha doğrusu parantezlerin bulunduğu yere çekmeliyim! Hani okuldaki bazı matematik hocalarımız, kullandığımız notasyona göre parantez ve işlem sıralarının önemi üzerine defalarca ve defalarca durur ya! İşte bu konuda belki en az o kadar önemli ve hatta Zafer'in, TÜTEV/Ankara sunumunda bahsettiği programcı hatalarının hayati önem arz edeceği bir durum da olabilirdi...:)
Alıntı (acehreli:1342478866):
>
> void main() {
> auto tekSayılar = new tekSayılarKümesi!uint;
>
> writeln(find!asal_Mı(tekSayılar).take(10));
> }
> ```
> Son satırda tek sayı elemanların asal olanlarının 'ilk 10 tanesini' elde ediyoruz.
Tamam, find/filter benzerliğini ve karışıklığını giderdik. Hatta üzerinde durmaya bile gerek yokmuş çünkü insanlık hali bu. Ancak doğru sonucu tutturmak için parantezlerin kullanımındaki incelik dikkatimi çekti. Böylece ilk hata başka bir hatanın düzeltilmesine vesile oldu. Çok söze gerek yok, aşağıda kodlarda her şeyi anlatıyorum:
void main() {
int xİlk = 100, xSon = 10; /* Dikkat anlam karmaşası !!!
Aslında xSon 119'u ifade eder...:) */
auto tekSayılar = new tekSayılarKümesi!(typeof(xİlk))(xİlk);
// Sadece tek sayılar kümesinden 10 adet (xSon kadar) sayı çıkarır:
tekSayılar.take(xSon).writeln;
tekSayılar.set(xİlk);
// Tek sayılar kümesinden 10 adet (xİlk'den itibaren) asal sayı çıkarır:
filter!asal_Mı(tekSayılar).take(xSon).writeln;
tekSayılar.set(xİlk);
// Tek sayılar kümesinden 5 adet (xSon'nun gösterdiği yere kadar) asalları çıkarır:
filter!asal_Mı(tekSayılar.take(xSon)).writeln;
tekSayılar.set(xİlk);
/* Yukarıdaki bu ifadeler,
xİlk değerinden itibaren
xSon değeriyle ilişkili
olarak sayılar çıkarır...
*/
}
**Çıktısı:**
'[101, 103, 105, 107, 109, 111, 113, 115, 117, 119]
[101, 103, 107, 109, 113, 127, 131, 137, 139, 149]
[101, 103, 107, 109, 113]'
Ayrıca eklemeliyim; 'asal_Mı()' işlevini filter! ifadesinden sonra parantez içine almak veya almamakta serbestiz. Çünkü derleme hatası dahil hiç bir fark olmuyor. Bu arada **set** diye yeni bir üye işlev ekledim. Bununla birlikte sınıfın son hali ve ihtiyaç duyulan diğer sınıflar ile birlikte şu şekildedir:
import std.algorithm, std.range, std.stdio;
class tekSayılarKümesi(T) {
T xSay;
this (T başlangıç = 1) {
set(başlangıç);
}
void set(T set) @property {
xSay = set;
if(set%2 == 0) xSay++;
}
bool empty() const @property {
return (xSay == T.max);
}
T front() const @property {
return xSay;
}
void popFront() {
xSay += 2;
}
}
Sevgiyle kalın...:)
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]