[cs-lisp] sual 3

2007-11-04 Başlik �ffffe7a�fffff0layan
Listemi islemden gecirip her bir elemaninin basina
sira no'sunu nasil ekleyebilirim.

__
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


[cs-lisp] Re: sual 3

2007-11-04 Başlik Volkan YAZICI
 {0} demiş ki: 
 Listemi islemden gecirip ...

İşlemden geçirmek ile, bir tür sıralamayı kast ettiğinizi varsayıyorum.

 ... her bir elemaninin basina
 sira no'sunu nasil ekleyebilirim.

(loop for item in (sort list pred)
   for idx from 0
   collect (cons idx item))

Ama sizin yerinizde olsam (coerce (sort list pred) 'vector) tarzı bir şey 
kullanırdım.


İyi çalışmalar.

___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


RE: [cs-lisp] sual 3

2007-11-04 Başlik Emre Sevinc
-Original Message-
From: [EMAIL PROTECTED] on behalf of aykut ÿe7aÿf0layan
Sent: Sun 11/4/2007 12:01 PM
To: lisp grup
Subject: [cs-lisp] sual 3
 
 Listemi 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
___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp


Re: [cs-lisp] Re: sual 3

2007-11-04 Başlik Aycan iRiCAN

Aycan iRiCAN wrote:

Volkan YAZICI wrote:
 {0} demiş ki:  

Listemi islemden gecirip ...



İşlemden geçirmek ile, bir tür sıralamayı kast ettiğinizi varsayıyorum.

 

... her bir elemaninin basina
sira no'sunu nasil ekleyebilirim.



(loop for item in (sort list pred)
   for idx from 0
   collect (cons idx item))

Ama sizin yerinizde olsam (coerce (sort list pred) 'vector) tarzı bir 
şey kullanırdım.
  
Bunun genel adı zip diye biliyorum. Örneğin elinizdeki listeyi, 
birden sonsuza sayılar listesi ile birebir işleme sokuyorsunuz. Bu 
genel özelliği CL'de acemice aşağıdaki gibi ifade edebilir miyiz acaba?


(defun zip (fn rest lsts)
 (if (any #'null lsts)
 nil
 (cons (apply fn (mapcar #'car lsts))
   (apply #'zip fn (mapcar #'cdr lsts)

(defun any (fn lst)
 (if (member nil lst)
 (or (funcall fn (car lst))
 (any fn (cdr lst)))
 nil))


Ya da çözümü CL'ye özelleştirerek;

CL-USER (let ((mylist '(a b c d e f)))
  (mapcar #'cons (core-server::seq (length mylist)) mylist))
((0 . A) (1 . B) (2 . C) (3 . D) (4 . E) (5 . F))

Fermuar yönteminin herhangi bir döngüden daha iyi olduğunu düşünüyorum.


CL-USER (let ((mylist '(a b c d e f)))
  (zip #'list (core-server::seq (length mylist)) mylist))
((0 A) (1 B) (2 C) (3 D) (4 E) (5 F))

Bu işlem haskell'de çok basit, zip [1..] mylist şeklinde bir ifade 
yetiyor ki bu yüzden seviyoruz onu.


Prelude zip [1..] abc
[(1,'a'),(2,'b'),(3,'c')]

Sevgiler...




--
Aycan iRiCAN
Kor Bilişim Ltd. Şti.
http://www.core.gen.tr/


___
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp