Benim de ilgimi çekiyor ama derlenen bir dil olmaması ve yavaşlığından dolayı ilgim azalıyor. Hoş bu iki olumsuz yanı birbiriyle ilişkili. Belki biz Türkler yeterince destek verirsek neden D1'in ilk sürümleri gibi olmasın!
Asal sayılara ilgim olduğundan şu kodu ve bir de daha hızlı asal sayı bulan algoritmayı deneyim dedim. Örneğin yukarıdaki işlevi şu şekilde denediğimde 7 asal sayını göstermediğini tespit ettim:
(let a (: 2 20))
(let say 0)
(foreach i in a
(if (= (isPrime i) 1)
(print i "\n")
)
)
(print "\nToplam bulunan asallar: " say)
Çıktısı:'
2
3
5
11
13
17
19
Toplam bulunan asallar: 0'
Alıntı:
C:\Users\Netbook\Downloads\fuzuli-win_0.1-5>fuzuli
Fuzuli build Jun 12 2012 12:36:46
Kullandığım sürüm son sürüm ve Hakan hoca ile iletişime geçmeden evvel bir kaç şey daha denedim. Örneğin block içine almayı:
(let a (: 2 20))
(let say 0)
(foreach i in a
(if (= (isPrime i) 1)
(block
(print i "\n")
(++say)
)
)
)
Çıktısı:'
2
3
7
11
13
17
Toplam bulunan asallar: 6'
Gördüğünüz gibi bu sefer 5 ile 19 asal sayıları kayboldu. İlginçtir bunun karşılığında 7 asal sayısı geri geldi. Block kullanma sebebim ise anladığım kadarıyla 'if()''den önce yer alan parantez bizim alışık olduğumuz küme parantezi gibi değil. Yani sadece tek satıra duyarlı. Eğer block kullanmazsanız say değişkeni 13 oluyor. Bu bulunan asal sayının iki katından bir fazlası.
Şurada (http://ddili.org/forum/post/6893) bahsettiğim algoritmayı da çalıştıramadım. Aslında notasyona yabancıyım ve hiç sevmiyorum diyebilirim. Öyle ya dünya yüzeyinde kaç ülkede kullanılıyor ki! Yinede kendimi zorlayarak algoritmadaki döngüyü şu şekilde yaptım:
(for (let n 3) (<= (* n n) p) (+ n 2)
Ama sonra bunu tek başına çalıştırdığımda n sayısının tahmin ettiğim gibi artmadığını gördüm. Ben de C'den esinlenerek iki farklı değişkeni arttırabileceğimize göre şöyle yapabiliriz diye düşündüm ve tek sayıları ekrana yansıtabildim:
(for (let n 2) (<= n 19) (++n) (++n)
Dikkat ederseniz n sayısı 2'den başlıyor! Çok ilginç değil mi? Çünkü anladığım kadarıyla iki defa arttırma yapıyorsam 2 sayısı ilk (++n)'i gördüğünde 3, sonraki (++n)'i gördüğünde ise 4 olmalıydı. Ama ilginçtir ki 5 çıkıyor...:)
En son bu şekilde ASAL_MI işlevine uyarladığımda maalesef şöyle bir hata aldım:
Alıntı:
5 [main] fuzuli 14572 exception::handle: Exception: STATUS_ACCESS_VIOLATION
5364 [main] fuzuli 14572 open_stackdumpfile: Dumping stack trace to fuzuli.exe.stackdump
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]