Re: [cs-lisp] nerde kalmistik.?
sanirim (generate rules-list axiom-list) tadinda bir sey istiyordun. yani kurallar listesi verilecek, baslangic liste verilecek, sonraki nesili cikaracak. tabii bunu yazarken kurallar listesi icindeki (burdaki grammer'in turkcesi?) butun kurallari taramak ve o anda gerekeni bulmak lazim gerekecek. h. Hmm, ben ilk verilen ornegi pek sevemedim. arkadas kurallari string olarak vermis, ve sonucta yaptigi sey de yine pattern matching ve string replace. Ben L-sistemi uc boyutlu olarak kullanip agaclar cizmistim vakti zamaninda ve stringler ile tutmustum. hic tavsiye etmiyorum, cok yer tutuyor, bir sekilde stream sistemi kurmak cok daha iyi olabilir. Benim uc boyutlu agaclarim on yasina (yada onuncu generasyona) geldiklerinde stringlerinin uzunlugu aya gidip geliyordu. Grafik motorum ne kadar iyi olursa olsun, o bilgiyi oyle cekip cizmek gayet yavas oluyordu. sonucta kaplumbaga grafiklerine bosuna kaplumbaga demiyorlar galiba. gerci L-system icin bu yeterli olsa da, sanki lispe daha yakin bir sekilde yapilabilir mi diye dusundum. sonucta dusunursek zaten uygulayacagimiz kurallar bir fonksiyon. foksiyon taramak gibi onlari yeniden aramak yerine, onlari fonksiyon olarak tanimlasak? kafalardaki data ve fonksiyonlar ayri seylerdir tutumunu yikmak cabasiyla demek istedigim su: (defun l () `(,#'l)) (defun r () `(,#'r)) ;90 derecelik koch egrisi ornegimiz olsun (defun f () `(,#'f ,#'l ,#'f ,#'r ,#'f ,#'r ,#'f ,#'l ,#'f)) (defun grow (fractal) (if (null fractal) () (append (funcall (car fractal)) (grow (cdr fractal) generasyon isini boylece halletmis oldum. cizim isi icin daha fazla sorun mu yarattim? bu da benim sorum olsun. :) not: bu arada Algorithmic Beauty of Plants kitabimi kaybettim, yenisi basilsa da alsam. ___ 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
Re: [cs-lisp] nerde kalmistik.?
On Feb 7, 2008 9:28 PM, Utku Somer [EMAIL PROTECTED] wrote: sanirim (generate rules-list axiom-list) tadinda bir sey istiyordun. yani kurallar listesi verilecek, baslangic liste verilecek, sonraki nesili cikaracak. tabii bunu yazarken kurallar listesi icindeki (burdaki grammer'in turkcesi?) butun kurallari taramak ve o anda gerekeni bulmak lazim gerekecek. h. Hmm, ben ilk verilen ornegi pek sevemedim. arkadas kurallari string olarak vermis, ve sonucta yaptigi sey de yine pattern matching ve string replace. Ben L-sistemi uc boyutlu olarak kullanip agaclar cizmistim vakti zamaninda ve stringler ile tutmustum. hic tavsiye etmiyorum, cok yer tutuyor, bir sekilde stream sistemi kurmak cok daha iyi olabilir. Aslinda yukarida bir semboller listesi kullanilmis. Sembollerin fazla yer tutan seyler olduklarini sanmiyorum. Bence buyuk bir ihtimalle hafizadaki bir string'e (veya benzer bir yapiya) pointer'dirlar ve ayni semboller icin yeni hafiza ayrilmiyordur. demek istedigim su: (defun l () `(,#'l)) (defun r () `(,#'r)) ;90 derecelik koch egrisi ornegimiz olsun (defun f () `(,#'f ,#'l ,#'f ,#'r ,#'f ,#'r ,#'f ,#'l ,#'f)) (defun grow (fractal) (if (null fractal) () (append (funcall (car fractal)) (grow (cdr fractal) generasyon isini boylece halletmis oldum. cizim isi icin daha fazla sorun mu yarattim? bu da benim sorum olsun. :) Ben yine de sembollerle calisilmasini oneririm. Yukaridaki ornekte veri kurallara siki sikiya bagli, pek esnek degil. Soyle birsey yapilabilir: (defvar *rules* (make-hash-table)) (setf (gethash 'F *rules*) '(F L F R F R F L)) (defun get-replacement (old) (gethash old *rules* (list old))) (defun grow (fractal) (let ((new-fractal '())) (dolist (old fractal (nreverse new-fractal)) (dolist (new (get-replacement old)) (push new new-fractal) (defun deneme () (format t ~{~a ~}~% (grow (grow '(F (let ((*rules* (make-hash-table))) ; *rules*'a yeni deger verebiliyoruz (setf (gethash 'F *rules*) '(A F B F)) (format t ~{~a ~}~% (grow (grow '(F)) -- Mehmet ___ 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
RE: [cs-lisp] nerde kalmistik.?
-Original Message- From: [EMAIL PROTECTED] on behalf of Aykut Caglayan Sent: Sat 2/2/2008 9:44 PM To: cs-lisp@cs.bilgi.edu.tr Subject: [cs-lisp] nerde kalmistik.? (defun my-replace (lst) (cond ((null lst) '()) ((eq (car lst) 'a) (append (list 'e) (my-replace (cdr lst ((eq (car lst) 'b) (append (list 'd) (my-replace (cdr lst (t (append (list (car lst)) (my-replace (cdr lst)) Bu sablonu L-sistem'i ya da bir fraktallik uygulamasina nasil cevirebilirim? Yani (null lst) true dondugunde sona erdirilen dongu sonucu bize verilen yeni listeyi, istedigim kereler ayni muameleye tabi tutmak istiyorum. Lindenmayer sistemleri ile ilgili olarak asagidaki orneklerin bir faydasi olur mu acaba? http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/05631fa93379bca8/248b67466ca2aa7d http://www.fractalconcept.com:8000/public/open-source/cl-pdf/examples/l-systems.lisp http://lispm.dyndns.org/lisp/pics/lindenmayer.jpg Bu arada CM gelistiricisi ve besteci Taube tarafindan gecenlerde duyurulan Grace ve GraceCL sistemlerini deneme imkanin oldu mu? (Ya da olur mu ve bir 'review' yazisi cikar mi Türkce?): http://ccrma-mail.stanford.edu/pipermail/cmdist/2008-January/004572.html http://ccrma-mail.stanford.edu/pipermail/cmdist/2008-January/004573.html http://sourceforge.net/project/showfiles.php?group_id=9766package_id=260559 http://sourceforge.net/project/showfiles.php?group_id=9766package_id=260584 -- Emre Sevinc ___ 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