Discussion:
sual 3
ÿffffe7aÿfffff0layan
2007-11-04 10:01:24 UTC
Permalink
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
Volkan YAZICI
2007-11-04 11:48:53 UTC
Permalink
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.
Aycan iRiCAN
2007-11-04 14:10:16 UTC
Permalink
Post by Volkan YAZICI
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))

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/
Aycan iRiCAN
2007-11-04 18:27:02 UTC
Permalink
Post by Aycan iRiCAN
Post by Volkan YAZICI
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.
Post by Aycan iRiCAN
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/
Emre Sevinc
2007-11-04 14:11:31 UTC
Permalink
-----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ÿfffff0layan
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
Loading...