• Sonuç bulunamadı

Bu örnekte L1 listesi 5 eleman içermektedir. Bir liste içerisinde başka bir listeyi de barındırabilir.

N/A
N/A
Protected

Academic year: 2022

Share "Bu örnekte L1 listesi 5 eleman içermektedir. Bir liste içerisinde başka bir listeyi de barındırabilir."

Copied!
9
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

2. LİSTELERİN YÖNETİMİ

2.1. LIST FONKSİYONU (list ifade...) veya „(ifade)

Veri kullanabilme AutoLISP ile programlamada önemli bir parçayı oluşturmaktadır. Tek veri için bağımsız değişkenlerin kullanımı çok pratik bir çözüm olmayabilir. Burada birçok farklı değişkenin farklı isimlerde ileri kullanımları için depolanma zorunluluğu vardır. Buda oldukça fazla değişken ismi kullanılmasını zorunlu hale getirir. Büyük boyutlardaki bilgilerin tutulması gerektiğinde en iyi yaklaşım bu verilerin bir liste içerisinde tutulması ve gerektiğinde çekilip kullanılması şeklinde olacaktır. Herhangi bir sayıda eleman içeren bir liste tek bir değişkene atanabilir.

(setq L1 (list “koridor” “tablo” 37.5 (list 2 2 0) “dolap”))

Bu örnekte L1 listesi 5 eleman içermektedir. Bir liste içerisinde başka bir listeyi de barındırabilir.

(list a b c ) (a b c)

(list a (b c) d ) (a (b c) d)

(list 3 a 2 e -8) (3 a 2 e -8)

AutoLISP ile grafik çizimde önemli bir kullanım yeri olan bu fonksiyon, düzlemde ve uzayda tanımlamış olan noktaların x y ve z eksenlerinin yerini belirlemede kullanılır. x y ve z uzaklıkları ayrı ayrı girildikten sonra list fonksiyonunun

(list x y z)

formatında kullanımı ile bir nokta oluşturulur. Getpoint ile seçilen noktanın x y ve z değerleri önceden girilmiştir. Bu değerler klavyeden ayrı ayrı girilerek oluşturulan noktanın list fonksiyonu ile tanımlanarak bir değişkene atayan uygulama aşağıdadır.

(setq x (getreal “\n x değerini giriniz”) y (getreal “\n y değerini giriniz”) z (getreal “\n z değerini giriniz”) n (list x y z)

)

n noktasının yeri x y ve z reel sayıları ile tanımlanmış olur. Çizim yada grafik uygulamalarda sadece n değişkeninin kullanımı yeterli olacaktır.

2.2. CAR FONKSİYONU (car liste)

Bu fonksiyon listenin ilk elemanını alarak gerekli yerlerde kullanımını sağlar.

(2)

(setq m (list 1 2 3 4 5))

Yukarıdaki örnekte, m değişkeni ile tanımlanan değişkene list fonksiyonuyla değerler atanmıştır. Bu listenin birinci elemanını kullanmak istediğimizde car fonksiyonunu harekete geçirerek listenin birinci elemanı listeden çekilerek kullanılır.

(setq m (list 1 2 3 4 5)) (setq m1 (car m))

1

(car „(a b c)) a

(car „((a b) c)) (a b)

(car „()) nil

Bu fonksiyon özellikle grafik çizimlerde noktanın üç boyutundan ilkini yani x değerini okumak yada başka bir değişkene atamak için kullanılmaktadır. n1(x y z) şeklinde verilmiş bir noktanın x değerinin okunması aşağıda verilmiştir.

(setq n1 (list 30 50 10)) (setq xn1 (car n1))

xn1=30

(setq n2 (getpoint “\n çizim ortamından bir nokta seciniz veya koordinatsal degerini giriniz”))

(setq xn2 (car n2))

xn2=n2 noktasının x değeri yazılır.

(setq n3 (getpoint “\n –61, –16, 10 değerleri klavyeden girilsin”))

(setq xn3 (car n3)) xn3= -61

;İki noktanın ortasını bulma (defun midp (pt1 pt2)

(list (/ (+ (car pt1)(car pt2)) 2.0) ;x degerinin ortalaması (/ (+ (cadr pt1)(cadr pt2)) 2.0) ;y degerinin ortalaması )

)

2.3. CDR FONKSİYONU (cdr list)

Cdr fonksiyonu mevcut olan listeden ilk elemanı çıkararak kalan elemanlar ile yeni bir liste oluşturur. Car fonksiyonuyla zıt olarak çalışan cdr fonksiyonu car fonksiyonunun aldığı elemanı dışarıda bırakır.

(cdr (list “d” 5.5 “hh”)) (5.5 “hh”)

(3)

(cdr „((defg) g i)) (g i)

cdr fonksiyonu listenin içerisainde istenilmeyen elemanların dışarıda bırakılması içinde kullanılabilir.

(setq catı (list “bakır” “kursun” “aliminyum”)) (setq catı (cdr catı))

(“kursun” “aliminyum”)

2.4. CADR FONKSİYONU (cadr list)

AutoLISP CAR ve CDR fonksiyonlarını CADR fonksiyonununda birleştirmiştir. CAR fonksiyonun ortasındaki A harfi ile CDR fonksiyonunundaki D harfini kullanarak cADr elde edilmiştir.

CADR fonksiyonu listenin ikinci elemanını alarak gerekli yerlerde kullanımını sağlar.

(setq m (list 1 2 3 4 5)) (setq m1 (cadr m))

m1=2

(cadr „(a b c)) b

(cadr „((a b) (c d) e)) (c d)

(cadr „()) nil

cadr fonksiyonu getpoint ile bir noktayı tanımlayan n(x y z) değerlerinden y nin okunmasını sağlar.

(setq n1 (list 30 50 10)) (setq yn1 (cadr n1)) yn1=50

(setq n2 (getpoint “\n çizim ortamından bir nokta seciniz veya koordinatsal degerini giriniz”))

(setq yn2 (cadr n2))

yn2= n2 noktasının y değeridir.

(cAr (cDr „(x y z)))

‟(y z)

Oluşan listenin ilk elemanını alır buda y‟dir

CADR fonksiyonu

(4)

(setq n3 (getpoint “\n –61, –16, 10 değerleri klavyeden girilsin”))

(setq yn3 (cadr n3)) yn3= -16

2.5. CADDR FONKSİYONU (caddr list)

CADDR fonksiyonu car ve 2 adet cdr fonksiyonunun kombinasyonundan oluşmuştur.

CADDR gonksiyonu listenin üçüncü elemanını alarak gerekli yerlerde kullanımını sağlar.

(setq m (list 1 2 3 4 5)) (setq m1 (caddr m))

m1=3

(caddr „(a b c)) c

(caddr „((a b) c (d e) f)) (d e)

(caddr „()) nil

caddr fonksiyonu getpoint ile bir noktayı tanımlayan n(x y z) değerlerinden z nin okunmasını sağlar.

(setq n1 (list 30 50 10)) (setq zn1 (caddr n1)) zn1=10

(setq n2 (getpoint “\n çizim ortamından bir nokta seciniz veya koordinatsal degerini giriniz”))

(setq zn2 (caddr n2))

zn2=n2 noktasının z değeridir.

(setq n3 (getpoint “\n –61,–16, 10 değerleri klavyeden girilsin”)) (setq zn3 (caddr n3))

zn3= 10

(cAr (cDr (cDr „(x y z)))

‟(y z)

Oluşan listenin z elemanını alır Oluşan listenin ilk elemanını alır buda z‟dir

CADDR fonksiyonu

(5)

2.6. C****R FONKSİYONLARI (caddr list)

C*****R kombinasyonlarında birçok ihtimalli fonksiyonlar türetilebilir. Bu fonksiyonların hepsi car vecdr fonksiyonlarının kullanılarak yapılırlar. Örnek olarak 3 adet C****R

fonksiyonu aşağıda verilmiştir.

CADAR fonksiyonu

(cAr (cDr (cAr „((u v) (wx) y z)))) v‟dir

CDDR fonksiyonu

(cDr ( cDr „((u v) (w x) y z ))) (y z)

CADDDR fonksiyonu

(cAr (cDr (cDr (cDr (cDr „((u v) (wx y z)))))) z

Aşağıda verilmiş olan fonksiyonlar bu şekilde oluşturulabilirler

caaaar cadaar cdaaar cddaar caaadr cadadr cdaadr cddadr caaar cadar cdaar cddar caadar caddar cdadar cdddar caaddr cadddr cdaddr cddddr caadr caddr cdadr cdddr caar cadr cdar cddr

problem

(setq L1 „(a b c (d e f))) (setq L2 „((a b) (c d) (e f)))

 Gerekli CAR ve CDR fonksiyonlarını kullanarak L1 listesinden c liste elemanını seçen program parçasını yazınız.

 Aynı yöntemi kullanarak L2 listesinden e liste elemanını seçen program parçasını yazınız.

 „(d e f) yi L1 den seçen program parçasını yazınız

 L2 den b liste elemanını seçen program parçasınıyazınız.

2.7. ÖRNEKLER

2.7.1. Listeleme fonksiyonları kullanılarak sembolik dişli çark çizimi yapan bir program Girdiler

Diş üstü çapı

B genişliği

(6)

h yüksekliği baslangic noktası

defun c: cizim ()

(setq Da (getreal "\n Da Diş üstü çapını giriniz")) (setq B (getreal "\n B genişliğini giriniz")) (setq h (getreal "\n h yüksekliğini giriniz"))

(setq n1 (getpoint "\n baslangic noktasini giriniz")) (setq n2 (list (+ (car n1) b) (cadr n1)))

(setq n3 (list (car n1) (+ (cadr n1) (/ Da 2)))) (setq n4 (list (car n2) (+ (cadr n2) (/ Da 2)))) (setq n5 (list (car n1) (- (cadr n1) (/ Da 2)))) (setq n6 (list (car n2) (- (cadr n2) (/ Da 2)))) (setq n7 (list (car n1) (- (cadr n3) h)))

(setq n8 (list (car n2) (- (cadr n4) h))) (setq n9 (list (car n1) (+ (cadr n5) h))) (setq n10 (list (car n2) (+ (cadr n6) h)))

(command "line" n1 n2 n4 n3 n5 n6 n10 n9 n7 n8 n10 "") )

2.7.2. Listeleme fonksiyonları kullanılarak bir Altıköşe başlı civata programı

(7)

(defun c: civata ()

(setq d (getreal "\n Vida capini giriniz")) (setq ll (getreal "\n Civata boyunu giriniz"))

(setq n (getpoint "\n Baslangic noktasini giriniz")) (setq n1 (list (car n) (- (cadr n) (/ d 2))))

(setq n2 (list (+ (car n1) (* 0.2 ll)) (cadr n1))) (setq n3 (list (+ (car n) ll) (cadr n1)))

(setq n4 (list (+ (car n) ll) (+ (cadr n) (/ d 2)))) (setq n5 (list (car n2) (cadr n4)))

(setq n6 (list (car n) (+ (cadr n) (/ d 2)))) (setq n7 (list (car n) (+ (cadr n6) (/ d 2)))) (setq n8 (list (car n) (- (cadr n1) (/ d 2)))) (setq n9 (list (+ (car n3) 3) (+ (cadr n3) 3))) (setq n10 (list (+ (car n4) 3) (- (cadr n4) 3))) (setq n11 (list (car n5) (- (cadr n5)(* 0.1 d)))) (setq n12 (list (car n2) (+ (cadr n2)(* 0.1 d)))) (setq n13 (list (- (car n8)(* 0.5 d)) (cadr n8))) (setq n14 (list (car n13) (+ (cadr n13) (/ d 2)))) (setq n15 (list (car n13) (+ (cadr n14) d)))

(setq n16 (list (car n13) (+ (cadr n15)(/ d 2))))

(setq n17 (list (- (car n15)(* 0.3 d)) (+ (cadr n15)(/ d 4)))) (setq n18 (list (- (car n13)(* 0.3 d)) (+ (cadr n13)(/ d 4)))) (setq n19 (list (- (car n14)(* 0.3 d)) (+ (cadr n14)(/ d 2)))) (setq n20 (list (car n4) (- (cadr n4)(* 0.1 d))))

(setq n21 (list (car n3) (+ (cadr n3)(* 0.1 d)))) (command "line" n n1 n2 n3 n9 n10 n4 n5 n6 "c"

"line" n5 n11 n12 n2 ""

"line" n4 n20 n21 n3 ""

"line" n11 n20 ""

"line" n12 n21 ""

"line" n16 n7 n6 n15 ""

"line" n14 n1 n8 n13 ""

"arc" n16 n17 n15""

"arc" n15 n19 n14""

"arc" n14 n18 n13 ""

"line" n17 n19 n18 "") )

2.7.3. Rondela çizimi (listeleme fonksiyonları yardımıyla)

(8)

(defun c: rondela ()

(setq d (getreal "\n D uzunlu§unu giriniz")) (setq z (getreal "\n z uzunlu§unu giriniz")) (setq b (getreal "\n b uzunlu§unu giriniz"))

(setq n1 (getpoint "\n BaŸlang‡ noktasn giriniz")) (setq n2 ( list (car n1) (+ (cadr n1) (/ (+ z 10) 2)))) (setq n3 ( list (car n1) (+ (cadr n1) (/ d 2)))) (setq n4 ( list(+ (car n3) b) (cadr n3)))

(setq n5 ( list (car n4) (cadr n1)))

(setq n6 ( list (car n5) (+ (cadr n5) (/ z 2)))) (setq n7 ( list(+ (car n1) (/ b 3)) (cadr n1))) (setq n8 ( list (car n7) (cadr n6)))

(command "pline" n2 n3 n4 n6 n8 "c") (command "hatch" "u" 45 1 "" "l" "") (command "line" n8 n7 "")

(command "line" n6 n5 "") (command "line" n2 n1 "") (command "line" n1 n7 n5 "")

(setq n9 (list (- (car n5) (/ b 2)) (- (cadr n5) (/ (+ z 10) 2)))) (command "mirror" "all" "" n1 n5 "")

(command "erase" n9 "")

(setq n10 (list (car n9) (- (cadr n2) (+ z 10)))) (command "hatch" "u" 45 1 "" "l" "")

)

2.8. GETCORNER FONKSİYONU (getcorner nokta [mesaj])

Bir değişkene, köşe noktasını belirten değerlerin girilmesinde ya da seçilmesinde bu fonksiyon kullanılır. Getpoint fonksiyonunda olduğu gibi çizim ortamının herhangi bir noktası seçilebilir, veya noktayı tanımlayan koordinat değerleri klavyeden girilebilir. Bu özellikle getpoint‟ten sonra kullanılır. Bir dörtgenin köşegenin birisi getpoint ile tanımlanır ise ikinci köşegen noktası getcorner ile seçilebilir veya değer atanabilir.

Örnek

(9)

(defun c: dörtgen ()

(setq n1 (getpoint “\n dörtgenin birinci köşegenini seçiniz “)

n2 (getcorner “\n dörtgenin ikinci köşegenini seçiniz

“)

n3 (list (car n2) (cadr n1) n4 (list (car n1) (cadr n2)

)

(Command “line” n1 n2 n3 n4 “c” “) )

Burada verilen örnekte list, car ve cadr fonksiyonları kullanılmıştır.

2.9. LAST FONKSİYONU (last liste)

Bir listedeki en son elemanı veren bu fonksiyonun uygulanma şekli aşağıda verilmiştir.

Command (last '(a b c d e)) E

Command (last '(a b c (d e))) (D E)

Command (last „(a b c d e)) e

Command (last „(x a (y z))) (y z)

2.10. LENGTH FONKSİYONU (length liste)

Bir listedeki elemanların sayısını tamsayı olarak veren bu fonksiyon aşağıdaki gibi uygulanır.

(length „(a b c d)) 4

(length „(a (x y) c)) 3

(length „()) 0

Referanslar

Benzer Belgeler

Yusuf Has Hacib'in kendi ana diliyle ve yu ksek maharetle aruz o lçu su nde yazması, kimileri tarafından ileri su ru len Uygur diliyle ''aruz o lçu su nde şiir

Bu kapsamda; 5510 sayılı Kanuna göre genel sağlık sigortalısı sayılmadığımı, herhangi bir şekilde bakmakla yükümlü olunan kişi durumunda olmadığımı,

MADDE 1 – (1) Bu Yönetmeliğin amacı, Orman Genel Müdürlüğü taşra teşkilatında 14/7/1965 tarihli ve 657 sayılı Devlet Memurları Kanununa tabi olarak görev yapan

Kathy adamın niyetinin ne olduğunu anladığında başını hıza kaldırdı ve kollarıyla onun geniş gövdesini itmeyi denedi ancak adam üzerine daha çok kapaklandı..

31 Mart’ta yapılacak Belediye seçimleri önce- sinde çalışmalarına ara vermeden devam eden İYİ Parti Bodrum Beledi- ye Başkan Adayı Mehmet Tosun ve Belediye

a) OYUNFOR, Site' de sunulan hizmetleri ve içerikleri her zaman değiştirebilme hakkını saklı tutmaktadır. OYUNFOR, bu hakkını, hiçbir bildirimde bulunmadan ve önel

7- Açıköğretim Fakültelerinden geçiş yapmak isteyen öğrencilerden 100 üzerinden 80 genel not ortalamasına sahip olmayanlar için ; yerleştirildiği yılki

16M İçortam Mikrodalga Çift Mironel Optik, Anti-Maskeleme, Pet Bağışıklığına Sahip Üçlü Dedektör ; 868Mhz,16 metre Çift Mironel dedektörü 12 metre SeeTrue aralığı