Merhaba,
Emre Sevinç <[EMAIL PROTECTED]> şöyle yazmış:
Zekeriya KOÇ wrote:
Merhaba,
Lisp ile yeni yeni ilgileniyorum. Uzun zaman önce bir kenara
bıraktığım Douglas Hofstadter'in Gödel, Escher, Bach (GEB) kitabını
yeniden okumaya başladım ve kitabın ilk bölümünde verilen bir
bulmacayı Lisp ile kodlamaya çalıştım. Aşağıdaki kodda bazı başlangıç
değerleri ve konuyla ilgili listelere uygulanabilecek kuralları
karşılayan fonksiyonlar var.
Ne kadar eglenceli bir e-posta bu böyle! :)
;;; mu.lisp ;;;
(defvar *miu* '(M I U)) ;; Biçimsel dizge.
(defvar *ilksav* '(M I)) ;; Baslangic dizgesi.
(defvar *hedef* '(M U)) ;; Bulunmasi istenen dizge.
(defun gecerli-p (dizge)
(dolist (i dizge t)
(if (not (member i *miu* :test #'equal))
(return nil))))
Korkunc bir performansi olabilecegini düsünsem de bazen, ben
set-difference fonksiyonunu seviyorum (bkz. matematik formasyonu almis
ve idealar dünyasinda yasayan insan profili:
(defun gecerli-p (dizge)
(not (set-difference dizge *miu*)))
Eger girdi dizgesinde *miu* listesinde olmayan bir eleman var ise o
elemani (bunu true kabul edebiliriz) aksi takdirde
NIL döndürür.
illa member fonksiyonu kullanilacaksa, :test keyword'üne bu durum icin
gerek var mi? Varsayilan
test zaten #equal degil mi?
kullandığım sbcl-0.9.12-win32 + emacs ortamında "(member " yazdığımda
emacs mini-buffer içinde (test #'eq) şeklinde gözüküyor. Belki sbcl'nin
linux için olan ileri versiyonlarında varsayılan karşılaştırma #'equal
olabilir bilemiyorum maalesef.
(defun k3 (dizge)
(if (gecerli-p dizge)
(let ((sayac1 0)
(sayac2 0))
(dolist (i dizge dizge)
(setf sayac1 (1+ sayac1))
(if (equal i 'I)
(setf sayac2(1+ sayac2))
(setf sayac2 0))
(if (= sayac2 3)
(return (remove 'I dizge :start (- sayac1 3) :end
sayac1)))))))
Böyle bol sayacli, dolistli bir seyler görünce aklima LOOP'a gidiyor
nedense:
http://www.gigamonkeys.com/book/loop-for-black-belts.html
Bu arada o "mu" bilmecesinin yani talep edilen ispatin varligina,
yokluguna dair bir fikriniz var mi?
Oradaki asil kilit nokta odur cünkü.
Henüz bulmacanın çözümünün verildiği bölüme gelmedim ama daha önceki
okumamdan hatırladığım kadarıyla "MU" teorami "MIU" dizgesi içinde
ispatlanamaz (türetilemez) şeklinde bir sonuç çıkıyordu.Zaten bunu
yazmamdaki sebep sadece Lisp kodlamak için küçük bir bahane teşkil
etmesiydi benim için. "Maksat ayağınız alışsın" (burada "eliniz")
deyimindeki gibi.
Teşekkürler.
--
Zekeriya KOÇ
http://www.metkoi.com/zekus
_______________________________________________
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