




































































































































































































































AutoCAD Genel
AutoCAD Eğitimi
3ds Max
Özel Yazılımlar
- aLd Fonksiyonu
- TCad Metraj
- FacadeCAD
- Cephe Kot
- HQ Library
- FreeMUST
- ALS/Pasdoc.A
- Excele Tablo Aktaran Lisp
- Nokta Koordinat Tablosu
- Plana İç Ölçü Verme
- Toplam Alanı Yazan Lisp
- Alan ve Çevre Yazan Lisp
- Koordinat, Alan ve Çevre Tablo Halinde Yazma
- AutoCAD'de Nokta Dökümü
- Hava Kanalı Metraj Fonksiyonu
- Boru Metrajı Fonksiyonu
- OptiCAD
- Özel Çizgi Tipi Oluşturmak
- AutoCAD te Koni Açılımı Nasıl Yapılır?
- PolyLine & Point Objelerinden Aplikasyon Çizelgesi
- Z değerini sıfırlama
- AutoCAD te Polyline üzerine uzunluk yazdırma
- Sıralı numaralandırma
- Yazı içindeki sayıları toplama
- Karmaşık Path ile Loft Uygulaması
- Çoklu Fillet Fonksiyonu
- Ölçekli Türk Bayrağı çizen lisp
Duvar-Lento-Kapı-Pencere Metraj Programı
Liste Fonksiyonları-3
Listelerde Sıralama ve lambda fonksiyonu
shark - 07.02.2006 10:59
shark - 07.02.2006 10:59
Visual Lisp'te listelerde siralama fonksiyonu olarak vl-sort kullanilir.
Örnek :
(setq liste1 (list 5 2 7 3 8))
(vl-sort liste1 '<)
Sonuc :
(2 3 5 7 8)
Burada vl-sort fonksiyonuna verdigimiz 1. parametre siralamak istedigimiz liste, 2. parametre de karşılaştırma fonksiyonudur. Burada karşılaştırma fonksiyonu olarak < fonksiyonu kullanılmış ve liste1 listesinin küçükten büyüğe doğru sıralanmış hali elde edilmiştir. < fonksiyonu yerine > fonksiyonunu ya da kendi tanımladığımız başka bir karşılaştırma fonksiyonunu kullanabiliriz.
Ancak; elimizde, sayı çiftlerini içeren şöyle bir liste olsun:
(setq liste2 (list (list 15 7) (list 9 12) (list 38 4)))
((15 7) (9 12) (38 4))
Biz bu listeyi, sayi ciftlerinden 1.sine göre sıralamak isteyelim. Bunu vl-sort fonksiyonu ile yapmak istersek:
(vl-sort liste2 '<)
; error: bad argument type for compare: (38 4) (9 12)
gibi bir hata ile karşılaşırız. Çünkü karşılaştırma fonksiyonu olarak verilen < fonksiyonu; (38 4) ve (9 12) gibi bir yapıyı karşılaştırmak istemiş ve bunun mümkün olmadığını bildiren bir hata mesajını bildirmiştir.
Bunu aşmak için kendi karşılaştırma fonksiyonumuzu tanımlamamız gereklidir.
(defun karsilastir(a b)
(< (car a) (car b))
)
sonra yazdığımız fonksiyonu kullanarak vl-sort ile sıralayalım:
(vl-sort liste2 'karsilastir)
((9 12) (15 7) (38 4))
Aynı şeyi, yeni bir fonksiyon tanımlamak yerine lambda fonksiyonu ile yapabiliriz.
(vl-sort liste2
(function (lambda (a b)
(< (car a) (car b))
)
)
)
((9 12) (15 7) (38 4))
aynı sonucu elde ettik.
Burada; daha önce karsilastir ismiyle tanımladığımız fonksiyonu vl-sort içinde lambda fonksiyonu olarak tanımladık. Lambda fonksiyonunu kullanarak, bir daha işimize yaramayacak bir fonksiyonu (karsilastir fonk.) ayrıca tanımlamaktan kurtulduk ve yazdığımız kod daha okunur/anlaşılır bir kod oldu.
Lambda fonksiyonları Lisp programlama dilinin en güzel özelliklerinden biridir ve burada yalnızca basit bir kullanım örneği verilmiştir.
Örnek :
(setq liste1 (list 5 2 7 3 8))
(vl-sort liste1 '<)
Sonuc :
(2 3 5 7 8)
Burada vl-sort fonksiyonuna verdigimiz 1. parametre siralamak istedigimiz liste, 2. parametre de karşılaştırma fonksiyonudur. Burada karşılaştırma fonksiyonu olarak < fonksiyonu kullanılmış ve liste1 listesinin küçükten büyüğe doğru sıralanmış hali elde edilmiştir. < fonksiyonu yerine > fonksiyonunu ya da kendi tanımladığımız başka bir karşılaştırma fonksiyonunu kullanabiliriz.
Ancak; elimizde, sayı çiftlerini içeren şöyle bir liste olsun:
(setq liste2 (list (list 15 7) (list 9 12) (list 38 4)))
((15 7) (9 12) (38 4))
Biz bu listeyi, sayi ciftlerinden 1.sine göre sıralamak isteyelim. Bunu vl-sort fonksiyonu ile yapmak istersek:
(vl-sort liste2 '<)
; error: bad argument type for compare: (38 4) (9 12)
gibi bir hata ile karşılaşırız. Çünkü karşılaştırma fonksiyonu olarak verilen < fonksiyonu; (38 4) ve (9 12) gibi bir yapıyı karşılaştırmak istemiş ve bunun mümkün olmadığını bildiren bir hata mesajını bildirmiştir.
Bunu aşmak için kendi karşılaştırma fonksiyonumuzu tanımlamamız gereklidir.
(defun karsilastir(a b)
(< (car a) (car b))
)
sonra yazdığımız fonksiyonu kullanarak vl-sort ile sıralayalım:
(vl-sort liste2 'karsilastir)
((9 12) (15 7) (38 4))
Aynı şeyi, yeni bir fonksiyon tanımlamak yerine lambda fonksiyonu ile yapabiliriz.
(vl-sort liste2
(function (lambda (a b)
(< (car a) (car b))
)
)
)
((9 12) (15 7) (38 4))
aynı sonucu elde ettik.
Burada; daha önce karsilastir ismiyle tanımladığımız fonksiyonu vl-sort içinde lambda fonksiyonu olarak tanımladık. Lambda fonksiyonunu kullanarak, bir daha işimize yaramayacak bir fonksiyonu (karsilastir fonk.) ayrıca tanımlamaktan kurtulduk ve yazdığımız kod daha okunur/anlaşılır bir kod oldu.
Lambda fonksiyonları Lisp programlama dilinin en güzel özelliklerinden biridir ve burada yalnızca basit bir kullanım örneği verilmiştir.
Yazar: Derya KILIÇ
İçerik:
Tag:
Yorumlar :

bana su şekilde bi lips lazım kod. işareti olcak kendim kot vercem sonra tıkladıkca yukseklige gore ilk verdiğim koda ekleyerek sayı yukselecek.yardımcı olurmusunuz acil