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

Cevap