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