1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

Örneklerle Fonksiyon Tanımları #13-Fonksiyon İlişkileri

sekil-01 


defun  Fonksiyon veya AutoLISP komutu tanımlar.  Birinci argüman tanımlanman yeni fonksiyonun ismidir. Daha önceden başka bir fonksiyon için kullandığınız ismi kullanamazsınız. İkinci argüman fonksiyon içerisinde değerler atamak için kullanılacak olan değişkenlerin listesidir. (Bu boş bir liste de olabilir.) Geri kalan ifade veya ifadeler fonksiyon çağırıldığı zaman, işletilirler.

(defun sertan (n) (* n 2.0))

Yukarıdaki ifade sertan isimli bir fonksiyon tanımlar. Bu fonksiyon (n isimli değişkene atanmış) bir sayıyı kabul eder ve o sayıyı iki ile çarparak sonucu geri döndürür. Bu fonksiyon herhangi bir yerleşik fonksiyon gibi çağrılabilir. Fonksiyon ismi liste içerisinde ilk sıraya konur; sonrasında sayı bu fonksiyona gönderilir. Örneğin,  (sertan 18) 36 olarak geri döner. Örneğimizdeki 18 sayısı n değişkenine geçici olarak atanır.

(defun hipo (a b) (sqrt (+ (* a a) (* b b))))

Yukarıdaki ifade hipo (hipotenüsün kısaltması) isimli bir fonksiyon tanımlar. Fonksiyon (üçgenin iki dik kenarının uzunluklarını simgeleyen a ve b isimli iki sayıyı kabul eder ve karekök (a2 + b2) formülü ile hesaplanan üçgenin hipotenüsünün uzunluğunu geri döndürür. Bu fonksiyon her hangi bir yerleşik fonksiyon gibi çağrılabilir. Liste içerisine önce fonksiyon ismi yerleştirilir;  daha sonra fonksiyona gönderilecek olan iki sayı yazılır. Örneğin, (hipo 5 12) fonksiyonu 13.0 olarak dönecektir. Sırasıyla 5 ve 12 sayıları geçici olarak a ve b değişkenlerine atanırlar ve fonksiyon tarafından işleme alınırlar.

Fonksiyonun isminin önüne “c:” yazılarak fonksiyon bir AutoLISP komutu olarak tanımlanabilir. Örneğin:

(defun c:hipo

(setq a (getreal “\n a kenarının uzunluğunu girin: “))

(setq b (getreal “\n b kenarının uzunluğunu girin:”))

(princ “\nHipotenüs = “)

(sqrt (+ (* a a) (* b b)))

)


load    AutoLISP program dosyalarını çizim düzenleyicisine yükler Bir dosya içerisinde bir veya birden fazla program tanımlanabilir. Dosya yüklenecek olan birden fazla program içerdiği zaman, sadece tanımlanmış olan son fonksiyonun ismi görüntülenir.

(load “strap”) STRAP.LSP isimli dosyayı yükler ve dosyada tanımlanmış olan son fonksiyonun ismini geri döndürür.

(load “a:sweep1”) a sürücüsünden SWEEP1.LSP isimli dosyayı yükler.

(load “\\pro\\sweep2”) \PRO klasöründen SWEEP2.LSP isimli dosyayı yükler.

(load “/pro/sweep2”) bir önceki örnekle aynı.

(load “strap.alp”)  STRAP.ALP isimli dosyayı yükler.

load fonksiyonu AutoCAD’in araştırma klasör yolundaki “search path“ tüm dosyaları araştırır.

Şayet yüklenmiş olan program çalışmazsa, AutoLISP tarafından işletilecek olan kod ilave ikinci bir argüman olarak belirtilebilir. Bu ilave argüman ekranda görüntülenecek bir dizge veya çalıştırılacak bir fonksiyon olabilir. Örneğin, şayet MAGIC.LSP isimli dosya mevcut değilse,

(load “magic”) alışıla gelmiş bir hata mesajı üretir (load “magic” “OOPS”) “OOPS” olarak döner (load “magic” (repeat 3 (princ “hata “))) komut satırına hata hata hata yazdırır ve “hata” olarak geri döner

Şayet AutoLISP fonksiyonlarınızı ve komutlarınızı otomatik olarak yüklemek isterseniz, bunları (dosyalarınızı) ’in araştırma klasör yolunda “search path“ ACAD.LSP isimli bir dosyanın içerisine koyun.


autoload         Dosya içerisindeki bir komut girildiği zaman, o dosyayı otomatik olarak yükler.

(autoload “utility” (list “aaa” “bbb”)) komut satırına AAA veya BBB girildiği zaman, UTILITY.LSP isimli dosyanın otomatik olarak yüklenmesini sağlar. UTILITY.LSP dosyası içerisinde, aaa ve bbb öncesinde “c:” ifadesi konularak komut olarak tanımlanmak zorundadır. Yukarıdaki defun fonksiyonuna bakın.


progn  İki veya daha fazla ifadeyi tek bir ifade içerisine gruplar ve son ifadenin değerini geri döndürür.

progn fonksiyonu fonksiyonun yazım biçimi sadece tek bir ifade yazmaya izin veriyorken birden fazla ifadeye ihtiyaç duyulan durumlarda faydalıdır. Örneğin:

(if (or (< x 5.0) (> x 10.0))

(progn       (prompt “Girilen değer aralık dışındadır.”)

(setq c1 (1+  c1))    )

(progn       (prompt ” Girilen değer aralık. içerisindedir”)

(setq c2 (1+  c2))

)

)


exit     Bu fonksiyon ile o anki geçerli (aktif) fonksiyondan çıkılır ve komut satırına geri dönülür.

(exit)  o anki geçerli (aktif) çalışmakta olan AutoLISP programını durdurur ve AutoCAD komut satırına geri döner.


quit     exit fonksiyonu ile aynıdır.


apply  Birinci argüman olarak verilen işlemi ikinci argüman olarak verilen listenin elemanlarına uygular ve sonucu geri döndürür.

(apply ‘*  ‘(2 4 6)) 48 olarak döner

(apply ‘-  ‘(2 4 6)) -8 olarak döner

(apply ‘and ‘(3.75 T “kapı”)) T olarak döner


mapcar          Birinci argüman olarak verilen elemanı ikinci argüman olarak verilen listeden çıkartır ve sonuç listesini geri döndürür.

(mapcar ‘1-  ‘(2 4 6)) (1 3 5) olarak döner

(mapcar ‘*  ‘(12 10 8) ‘(1 2 3)) (12 20 24) olarak döner

(mapcar ‘max  ‘(90 75 95) ‘(88 89 90) ‘(-100 0 100)) (90 89 100) olarak döner


lambda           Geçici bir fonksiyon tanımlar.

lambda fonksiyonu aşağıdaki örneklerde görüldüğü üzere tipik olarak bir apply veya mapcar fonksiyonu içerisine gömülmektedir. lambda fonksiyonunun biçimi “format” lambda fonksiyonu ayrı olarak depolanmayan geçici bir fonksiyon tanımladığı için, ismi olmaması haricinde defun fonksiyonunun biçimi “format” ile aynıdır.

(apply ‘(lambda (p q r)

(setq m (sqrt (+ p q)))

(setq n (+ p q (* r 2.0)))

)

‘(2 4 6)) Yukarıdaki ifade (sadece lambda fonksiyonu içerisindeki son ifade geri döneceği için) 18 olarak döner.

(mapcar ‘(lambda (x y)

(* x y))        (1 2 3 4) ‘(5 4 3 2))

Yukarıdaki ifade (5 8 9 8) olarak döner.

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Plan Görünüşünün Derinliğini Ayarlama Hakkında

Revit’te bir modelin parçalarını kesme düzleminin altında görüntülemek için, Derinlik Kırpma “Depth Clipping“ parametresini kullanın. …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.