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. hmmmm.
>
> 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

Cevap