>>>>> "VST" == Vehbi Sinan Tunalioglu <[EMAIL PROTECTED]> writes:
>>>>> "BM" == Bulent Murtezaoglu <[EMAIL PROTECTED]> writes: >>>>> "VST" == Vehbi Sinan Tunalioglu <[EMAIL PROTECTED]> writes: VST> Ote yandan bunlar bana Regular Expression ve Turing Machine VST> arasindaki kullanim farkini merak ettirdi. Computational VST> complexity acisindan degil tabii ki... Ama az once gordugumuz VST> gibi, regex yerine, bu tarz bir kod kullaninca (Turing VST> Machine equivalent sanirim) daha az CPU cycle ve CONS ile VST> isimizi halledebiliyoruz. Ne dersiniz? BM> Hmm. Yok. Bunu belki biraz farkli ifade etmek lazim BM> manasinin acik olmasi icin. Ben anlamadim bu paragrafi BM> mesela. VST> Evet, pek acik degil. Hatta biraz da hatali belirtmisim. VST> Aciklayayim: Regular Expressionlar, Turing Machine'den cok VST> daha kisitli dillerdir. Bu haliyle "finite state automata" VST> ile islenebilirler. Yani cok daha az maliyetli ve performansi VST> yuksek cihazlar ile... Ancak, diyorum ki, Turing Machine VST> diyerek betimleyebilecegimiz programlarla, herhangi bir regex VST> `pattern'ini bir `finite state automata'dan daha verimli bir VST> sekilde test edebilir miyiz? Bizim buradaki ornegimizi ele VST> alacak olursak, bildigim kadariyla, regex girdinin tamamini VST> okumadan karar vermiyor. Ornek: "Turing makinasi" denen soyut makinadan bahsettigimizde ve Turing makinasinin misal elimizdeki bilgisayara denk oldugunu düsünürsek ve sonlu durum makinasi dedigimiz seyin de aslinda bir Turing makinasi üzerinde calisan bir sey oldugunu düsünürsek o zaman Turing makinasi, sonlu durum makinasindan daha etkindir demek anlamli mi? VST> Regex: ab.* VST> Bu ornekte "abfoobarfoobarfoobar" girdisinin tamami okunmadan VST> karar verilmiyor (mu acaba?). Burada dikkate deger nokta, VST> regex makineleri (finite state automatonlarin) bilgisayar VST> ortaminda aslinda Turing Machine ile (yani bir bilgisayar VST> programlama dilinde yazilmis programlarla) simule edildikleri VST> icin `finite state automaton'un basitliginden ve dolayisi ile VST> hizindan mahrum kalmamiz. Sonlu durum makinasini, Turing makinasina denk olmayan bir bilgisayarda islemekten mi bahsediyorsun? VST> Ayni `pattern' icin bir Turing Machine (kisacasi bir VST> algoritma) ile sunu da diyebilirdik: VST> TM: ilk iki harf sirasiyla a ve b'ye esitse KABUL, yoksa RED. VST> Burada anlatmaya ve anlamaya calistigim seyi bircok sekilde VST> ifade etmem mumkun. Bir kez de su sekilde bir soru kuruyorum: VST> Herhangi bir regex kutuphanesi de, kendi kendimize VST> uyguladigimiz bir algoritma da su islemi yapmiyor mu: VST> 0. girdi bittiyse kabul et, aksi takdirde, 1. girdinin VST> siradaki harfini register-1'e al, 2. kiyaslayacagin VST> `pattern'deki siradaki harfi register-2'ye al, 3. iki VST> registeri kiyasla, ayniysa bir sonraki harfe gec ve bu VST> proseduru uygulamaya devam et, degilse REDDET. Evet o sekilde islem yapiyor diye biliyorum, daha dogrusu ona denk gelecek sonlu durum makinasini kuruyor (biri beni düzeltsin sacmaliyorsam). VST> Burada dikkati cekmek istedigim olay, kiyaslama olayi. VST> Sonuc: Girdileri bir patternle kiyaslamak zaten hizli bir VST> islem degil. Evet, statik yani sabit karakter dizisi parcasini daha büyük bir dizi icinde aramaya kiyasla daha yavas. VST>Regex kutuphanelerinin yazilmasinin sebebi, bu VST> kiyaslamayi hizli yapmak icin degilmis de hizli kod yazmak VST> icinmis gibime geliyor. Halbuki basit ama regexe kiyasla VST> uygulamasi daha uzun algoritmalarla is halletmek cok daha VST> hizli sonuclar veriyor. Bu genelleme dogru olabilir mi? Basitlik... Ne kadar basit? Yukarida gercekten basit örnek verdin, biliyorsun ki cok cok acayip patternler aradigimiz oluyor duruma göre. O zaman elle yazacagin algoritma optimize bir regex kütüphanesinin üretecegi sonlu durum makinasina kiyasla daha mi iyi olacak? Bu bir tartisma konusu. Öte yandan, DSL yani "domain specific language"in gücü buradan cikmiyor mu, kendin prosedürel yöntemle imperatif olarak bir seyler yazdin, sonra o örüntüde (pattern'de) bir degisiklik yapman gerekti, ne olacak, tekrar git koda müdahale et! Koda müdahale kötü, veriye müdahale iyi diyorum. Bkz. RDBMS modeli. Arka planda karmasik kodlar var, kapali kutu. Sen veri ile ugrasir onu minciklayip durursun. SQL sana bir DSL gibi arayüz saglar. Hayat sürer gider... BM> Kod aciksa gecin buraya bence, topluca elleyelim bakalim ne BM> hale gelecek. Iyi bir egzersiz olur. VST> Agabey, izin ver, kodun oldugu dosyayi temizleyeyip, VST> aciklamalariyla beraber bahsettigim fonksiyonlari VST> gondereyim. Zira, gereksiz ve konumuzla ilgisiz bir cok VST> fonksiyon ile kafanizi sisirmek istemem. CVS... DARCS... yapsak ortaya bir karisik, sonra Common Lisp SNA modülünün CVS ya da DARCS modülü islevselligi olsa, commitleri filan analiz edip SNA yapsa :) Neyse saka bir yana, hakikaten bir kod deposu mevzusuna girsek ve o sekilde ortaklasa Lisp kodlasak, Emacs icinden kod deposuna baglansak, o tadi yakalasak, güzel bir deneyim olmaz mi diye düsünüyorum ben hala... -- Emre Sevinc eMBA Software Developer Actively engaged in: http:www.bilgi.edu.tr http://ileriseviye.org http://www.bilgi.edu.tr http://fazlamesai.net Cognitive Science Student http://cazci.com http://www.cogsci.boun.edu.tr _______________________________________________ cs-lisp mailing list cs-lisp@cs.bilgi.edu.tr http://church.cs.bilgi.edu.tr/lcg http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp