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?
(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ü.
--
Emre Sevinç
eMBA Yazılım Geliştirme
İstanbul Bilgi Üniversitesi
_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp