Listeler
Lispte listeler dizi yerine kullanılır. Aslında en güçlü olduğu yer listelerdir. LISP List
Processing kısaltmasıdır. Listeler sayılardan, metinlerden, variable'lerden ve başka listelerden oluşabilir. Liste içinde liste olabilir. Liste elemanları arasında boşluk vardır. Liste örneği aşağıdadır.
(2 2.3 "kenan" (4.2 3.4) "istanbul")
Nokta bir listedir.
(setq pt1 (getpoint "\nBir nokta seçiniz : "))
Autolisp'te aşağıdakine benzer bir liste elde edilir. x, y, z koordinatlarını veren
bir listedir.
(128.64 36.23 0.0)
x, y, z koordinatlarını okumak için bir kaçtane liste fonksiyonu vardır.
Car
Car fonksiyonu, listenin ilk elemanını bize verir.
Örneğin,
(setq x (car pt1))
Bize pt1 noktasının x koordinatını aşağıdaki gibi verir,
(128.64)
Cdr
Car fonksiyonu, listenin ikinci elemanından sonraki listeyi verir.
Örneğin,
(setq b (car pt1))
Bize pt1 noktasının (y, z) koordinatını aşağıdaki gibi verir,
(36.23 0.0)
Cadr
Car fonksiyonu, listenin ikinci elemanını verir.
Örneğin,
(setq y (car pt1))
Bize pt1 noktasının (y, z) koordinatını aşağıdaki gibi verir,
(36.23)
Cddr
Car fonksiyonu, listenin üçüncü elemandan sonrasını verir.
Örneğin,
(setq c (car pt1))
Caddr
Car fonksiyonu, listenin üçüncü elemanını verir.
Örneğin,
(setq z (car pt1))
Bize pt1 noktasının z koordinatını aşağıdaki gibi verir,
(0.0)
nth
nth fonksiyonu, listenin n'inci elemanını verir. İlk eleman no sıfırdır. Aşğıdaki gibi kullanılır.
(nth num list)
Örneğin
(setq d '("M10" "M20" "M30" 10.25))
(setq e (nth 0 d))
Çalıştırdığımızda aşağıdaki sonucu verir.
("M10")
ve benzer olarak
(setq f (nth 3 d))
Çalıştırdığımızda aşağıdaki sonucu verir.
(10.25)
Diğer Liste İşlemleri
Bilinen elemanlardan ve değişkenlerden de liste oluşurulabilir. Aşağıda iki dennklem var. Bunlardan liste oluşturalım.
(setq a 210.0)
(setq b 500.0)
Biz a ve b değerlerinden yeni bir liste oluşturalım. (list) liste oluşturan fonksiyondur. Örneğin
(setq c (list a b))
Çalıştırdığımızda aşağıdaki sonucu verir.
(210.0 500.0)
benzer olarak yukarıdaki ifadeyi, aşağıdaki gibi yazarsak aynı sonucu buluruz.
(setq c '(a b))
Aşağıdaki örneği inceleyiniz.
(defun c:rec ( / pt1 pt2 pt3 pt4)
(setq pt1 (getpoint "\nilk köşeyi seç: "))
;ilk noktayı getirir
(setq pt3 (getcorner pt1 "\nİkinci köşeyi seç: "))
;bu üçüncü noktaı getirir.
(setq pt2 (list (car pt1) (cadr pt3)))
;ikinci noktayı tanımladık
(setq pt4 (list (car pt3) (cadr pt1)))
;dördüncü noktayı tanımladık
(command "Line" pt1 pt2 pt3 pt4 "c")
;dikdörtgeni çizdik
(princ)
);defun
;**********************************************************
(setq pt2 (list (car pt1) (cadr pt3)))
Yukarıdaki ifadeyi inceleyelim. (car pt1) bize pt1 noktasının x koordinatını verir. (cadr pt3) bize pt3 noktasının y koordinatını verir.
(list (car pt1) (cadr pt3)) ifadesi bize, pt1'in x, pt3'ün y koordinatından yeni bir liste (yani yeni bir nokta) oluşmasını sağladı.
Append
İki listeyi birleştirir.
(append '(12.0 15.5) '("M20" "M30))
Aşağıdaki çıktıyı verir.
(12.0 15.5 "M20" "M30")
Last
Bir listenin son elemanını verir.
(last '("M20" "M33" "M30"))
Aşağıdaki çıktıyı verir.
("M30")
Length
Bir listenin son elemanını verir.
(length '("M20" "M33" "M30"))
Aşağıdaki çıktıyı verir.
(3)
Member
Bir elemanın liste içinde olup olmadığını verir. Eğer elemanı ise, listenin
bu elemandan sonrasını verir. Eğer elemanı değilse nill değer verir.
(member 'c '(a b c d e f))
Aşağıdaki çıktıyı verir.
(c d e f)
Subst
Bir listedeki bir eleman yerine, başka elemanlar koymak için kullanılan fonksiyondur.
ifade : (subst yeniİfade eskiİfade liste)
(setq liste '(a b c d e c))
(subst 'f 'c liste)
liste içindeki c değeri yerine f değerini koyar. Çıktı aşağıdadır.
(a b f d e f)