[cs-lisp] sual 3
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
{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
-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
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