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