Tekrar Merhaba,

Bulent Murtezaoglu <[EMAIL PROTECTED]> şöyle yazmış:


Sunu deneyebilir misiniz?

(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
(nconc (subseq dizge 0 (- sayac1 3)) (cons 'U (nthcdr sayac1 dizge)))))))))

En son bu dediğinizi uyguladım ve istediğim sonuca ulaştım. Bu sorunla ilk karşılaştığımda CL içinde sizin yazdığınıza benzer bir çözüm olacağını sesmiştim. Yani günümüz programlama dillerinden biraz farklı bir yaklaşım sonucu ve benim için heyecan verici. Aynende öyle oldu. subseq ve cons fonksiyonlarını biliyordum ama nconc'u şimdi öğrendim. Common Lisp gerçekten de büyük bir dil.

Sadece ilk III'i degistiriyor bu yalniz, amac bu mudur?

Nesye nconc'u subseq'in verdigi yeni listeye yapiyorum, yani orjinal
liste bozulmuyor.  Bu optimal cozum degil hiz acisindan.  Hizli
calismasi icin soyle birsey deneyin isterseniz, loop meraklilari da
fitik olsun do'yu okumaya calisirken (bunu biraz denedim):

(defun iii-u-olsun (dizge)
  (do ((sayac 0)
       (ibasi) ;; (car ibasi) = ilk I
       (kalaninbasi dizge (cdr kalaninbasi)))
      ((null kalaninbasi) dizge)
    (cond ((eq (car kalaninbasi)  'I)
           (incf sayac)
           (cond ((= sayac 1)
                  (setf ibasi kalaninbasi))
                 ((= sayac 3)
                  (setf sayac 0
                        (car ibasi) 'U
                        (cdr ibasi) (cdr kalaninbasi)))))
          (t (setf sayac 0)))))

CL-USER> (iii-u-olsun '(I I))
(I I)
CL-USER> (iii-u-olsun '(i i i a))
(U A)
CL-USER> (iii-u-olsun '(a i i i a))
(A U A)
CL-USER> (iii-u-olsun '(i i i a))
(U A)
CL-USER> (iii-u-olsun '(a b c))
(A B C)
CL-USER> (iii-u-olsun '())
NIL
CL-USER> (iii-u-olsun '(i i i))
(U)
CL-USER> (iii-u-olsun '(a i i i b c i i i))
(A U B C U)
CL-USER> (iii-u-olsun '(a i i i i i i i))
(A U U I)

takrar yazin tekrar minciklayalim lutfen,

BM


_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp




--
Zekeriya KOÇ
 http://www.metkoi.com/zekus

_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp

Cevap