Forum: D Programlama Dili RSS
lazy de gidici olabilir
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: lazy de gidici olabilir
D.ershane'ye biraz erken başladığımı düşünmeye başladım. :) Yine de bu gelişmeleri canlı olarak izlemek zevkli...

Şimdi de lazy'yi atıp atmamayı tartışıyorlar:

  http://www.digitalmars.com/webnews/newsgroups.…?art_grou…

Orada tehlikelerinden de bahsediyorlar. Örneğin foo'nun parametresinin tembel olduğunu unutan birisi onu şöyle çağırabilir:

    foo(birinci_adım());
    ikinci_adım();

Çağıran unuttuğu için, işlemin birinci adımı işletilmeden ikincisine geçilebilir.

Ali
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben de lazy'yi nedense çok sevemedim diyorum demek ki bu yüzden sevememişim :-)

Şaka bir yana lazy'nin yaptığını biz kendimiz nasıl işleve yaptıracağız ? Sanki bana atmanında gereksiz gibi geliyor. İsteyen istediği gibi kullanır. Sistem programlama dilinde dilin sınırlarını birazda yazılımcının eline vermez mi ?
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bir Haskell tanıtımını dinlemiştim. O dilde tembel değerlendirmeler bazı durumlarda çok yarar sağlar.

Örneğin elimizde çok uzun bir veri olsun (dinlediğim örnekteki program DNA zinciri üzerineydi). Bu verinin herhangi bir kıstasa göre ilk değerini istiyor olalım. Veriyi önce sıralamak gerekir.

"Hevesli" dillerde (örneğin C++) önce sırala(veri) işlevi çağrılır ve sıralanan verinin ilk elemanı kullanılır. Geri kalanının sıralanması işi tamamen boşa gitmiştir.

Sıralama işlevinin qsort'ta olduğu gibi özyinelemeli olduğunu düşünürsek, bütün sıralama şu işlemlerden geçer:

- büyükleri ilk yarıya, küçükleri son yarıya at (sırasız olarak)
- bu işlemi 1 adet eleman kalana kadar alt yarılarda tekrarla

Sonunda bütün elemanlar sıralanmış olurlar. Ama eğer amacımız ilk eleman ise, hiçbir adımda sağ yarının hesaplanması gerekmez. Dizinin sağ tarafı sırasız da olsa, yalnızca ilk yarıları sıralamak en büyük olanı başa getirir.

İşte Haskell işlemleri hevesli bir şekilde hemen işletmek yerine, değer gerçekten kullanıldığında işletir. Dizinin ilki dışındaki elemanına dokunulmayınca da gereksiz sıralama işlemleri yürütülmez.

İşte tembel değerlendirmeler o gibi durumlarda işe yarayabilirler. :)

canalpay:
Şaka bir yana lazy'nin yaptığını biz kendimiz nasıl işleve yaptıracağız ? Sanki bana atmanında gereksiz gibi geliyor. İsteyen istediği gibi kullanır. Sistem programlama dilinde dilin sınırlarını birazda yazılımcının eline vermez mi ?

Haklısın: Dilin güvenliliği ve verdiği serbestlik güzel bir şekilde dengelenmeli...

Ayrıca hatırlatmak için, lazy'nin güzel bir örneği işlemler hakkında bir kenara bilgi yazarken ("loglarken") görülür. Walter Bright'ın makalesini şurada çevirmiştim:

  http://ddili.org/makale/tembel_hesap.html

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-22, 07:00:47 (UTC -08:00)