Merhaba,

Wed, 01 Nov 2006 17:12:37 +0200 tarihinde Bulent Murtezaoglu <[EMAIL PROTECTED]> şöyle yazmış:


Programi anlayip calistirmadim simdi ama sadece yuzeyden okuyarak
bir iki sey soyleyeyim:

defvar, defparameter, defconstant arasinda yeni baslayanlar icin
gelistirme esnaisinda en tehlikeli olan defvar.  Pes pese evaluate
edildiginde degeri degistirmiyor.

CL-USER> (defvar *foo* '(1 2 3))
*FOO*
CL-USER> *foo*
(1 2 3)
CL-USER> (defvar *foo* '(1 2 3 4))
*FOO*
CL-USER> *foo*
(1 2 3)

Tek bacakli if yerine when kullanmak bazen daha okunakli olabilir.  Sizin
programda bir ornek bulamadim ama ozellikle (if (foo-p x) (progn ...))
yerine when daha uygun.  Progn gerektirmese bile else'i olmayan uzun
if'ler icin de when bana daha dogru geliyor.  Burada belli bir kural
yok benim bildigim -- programciya kalmis.  Mesela

(defun k1 (dizge)
  (if (gecerli-p dizge)
      (if (equal (last dizge) '(I))
          (append dizge '(U))
        dizge)))

yerine

(defun k1 (dizge)
  (when (gecerli-p dizge)
    (if (equal (last dizge) '(I))
        (append dizge '(U))
        dizge)))

Olabilir.

Seboller icin eq calisiyor, en azindan ben okurken

(if (equal i 'U) ...

diye birsey gorunce icimden 'bir dakika, ne oluyor burada?' diyorum.

(if (eq i 'U) ...

gorunce rahat ediyorum.


Soylenmese de, genelde i j k isimli degiskenlerin tamsayi olmasi
bekleniyor okurken.  Dolayisiyla su benim gozumu tirmaliyor

(defun gecerli-p (dizge)
  (dolist (i dizge t)
    (if (not (member i *miu* :test #'equal))
        (return nil))))

Soyle de olur bu herhalde: (dikkat denemedim ve cok hata yaparim bunlarda
ben!)

(defun gecerli-p (dizge)
  (every #'(lambda (x)
             (member x *miu* :test #'equal))
         dizge))

ve *miu* sembollerden ibaret olduguna gore

(defun gecerli-p (dizge)
  (every #'(lambda (x)
             (member x *miu*)
         dizge))


CL buyuk bir dil, bunun getirileri var, mesela

(setf sayac2 (1+ sayac2))

yerine

(incf sayac2)

BM


Yorumlar ve öneriler için çok teşekkürler.


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