-----Original Message-----
From: cs-lisp-***@cs.bilgi.edu.tr on behalf of aykut "ÿffffe7aÿfffff0layan
Sent: Sun 11/4/2007 12:01 PM
To: lisp grup
Subject: [cs-lisp] sual 3
Post by ÿffffe7aÿfffff0layanListemi islemden gecirip her bir elemaninin basina
sira no'sunu nasil ekleyebilirim.
Ne tur bir islem?
Bu belirtilmemis.
Listeye uygulanan islem yani fonksiyon yine bir liste mi donduruyor. Eger bir liste donduruyor ise ve buna lst dersek:
(defun add-order-no (lst)
"Returns a list by adding the order number to each item in lst,
assuming lst is a list."
(if (listp lst)
(loop
for i = 0 then (incf i)
for item in lst collect (cons i item))
(princ "argument lst is not of type list!")))
Yani listeye uygulanan isleve, yani fonksiyona F dersek ve bu bir liste donduruyorsa o zaman
(add-order-no (F orjinal-liste))
bize istedigimiz seyi dondurur, F'yi isin icine karistirmadan birkac ornege bakacak olursak:
CG-USER(10): (add-order-no '(1 2 3))
((0 . 1) (1 . 2) (2 . 3))
CG-USER(14): (add-order-no '())
NIL
CG-USER(15): (add-order-no '1)
argument lst is not of type list!
"argument lst is not of type list!"
CG-USER(17): (add-order-no '(a b c))
((0 . A) (1 . B) (2 . C))
Peki ya listemiz suna benziyorsa:
'(a (do re) (mi fa) (sol la) c))
O zaman ne olur?
CG-USER(18): (add-order-no '(a (do re) (mi fa) (sol la) c))
((0 . A) (1 DO RE) (2 MI FA) (3 SOL LA) (4 . C))
Bu istedigimiz bir sonuc mu?
Sual 3 iyi tanimli degil gibi sanki.
Bu arada fonksiyonun bir de dokumantasyonu var, ona programatik olarak nasil erisiriz diye merak edilirse:
CG-USER(20): (documentation 'add-order-no 'function)
"Returns a list by adding the order number to each item in lst,
assuming lst is a list."
Genel olarak bu ana tema ustune cesitlemeler gelistirilebilir.
--
Emre Sevinc