12 Eylül 2007 Çarşamba

AutoLISP Dosyalarının Yapısı:

Bir LISP dosyası içinde tüm fonksiyonlar bir sol parantez " ( " ile başlar ve bir sağ parantez " )" ile biter. Parantezler kuralına uyuldukça bir fonksiyon içinde başka alt fonksiyonlar da bulunabilir. AutoLISP dosyalarının ilk satırları daima (defun ifadesiyle başlar. Bu AutoLISP'in en temel fonksiyonudur. Defun fonksiyonu kullanılmadan AutoLISP programı yazılamaz. AutoLISP, fonksiyonların veya değişkenlerinin yazılması veya derlenmesi sırasında büyük küçük harf ayrımı yapmaz.

Örnek:
(defun fonk.adı ( )
(sub.fonk1 (sub.fonk2))
) ; parantez sayısına dikkat ediniz.

Yukandaki örnekte görüldüğü gibi fonksiyon (defun ile başlamıştır. Sub.fonk olarak tanımlanan fonksiyonlar ana fonksiyon içinde kullanılan ve işlemleri yapan alt fonksiyonlardır. Bu alt fonksiyonlar genellikle, standart LISP fonksiyonları veya kullanıcıların tanımladığı fonksiyonlardır. Daha önce de belirtildiği gibi LISP dosyalarında dikkat edilmesi gereken en önemli hususlardan bir tanesi parantezlerdir. Özetle diyebilirim ki AutoLISP dosyasında "AÇILMIŞ OLAN PARANTEZ KADAR PARANTEZİN PROGRAM AKIŞINA GÖRE UYGUN YERLERDE KAPATILMASI ZORUNLUDUR."

Yazılan AutoLISP dosyaları AutoCAD ortamına çağrıldığında (bu işlem daha sonra detaylı olarak anlatılacaktır) daha önce de belirtildiği gibi AutoLISP tarafından değerlendirneye alınır. Bu değerlendirme dosya AutoCAD ortamında çalıştırılmaya başlanmadan hemen önce yapılır. AutoLISP değerlendiricisine EVULATOR adı verilir. Değerlendirme esnasında ekranda Command: alanında ; n> ifadesi görülürse (n bir tamsayıdır) n kadar sağ parantezin eksik olduğu anlaşılır.Yani açılan sol parantezler içinde n tanesi sağ parantez kullanılarak kapatılmamıştır. Bu hatayı düzeltebilmek için LISP dosyanıza dönerek n tane sağ parantezi uygun yerlere koymanız gerekir.

Bazen programın başında açılmış olan bir sol parantez programın sonlarına doğru kapatılabilir (Yukarıdaki örnekte olduğu gibi). Tabii ki bu parantezlerin yeri fonksiyonun işlevi ile bağlantılıdır.Fonksiyonlar içindeki ifadeler birden fazla satıra taşabilir ;

(prompt "BU YAZI BIR SATIRDAN FAZLA OLDUĞU İÇİN İKİNCİ SATIRA DA DEVAM EDEBİLİR. ÖNEMLİ OLAN AÇILMIŞ SOL PARANTEZLERİN SAĞ PARANTEZLER İLE KAPATILMASIDIR" )

Defun fonksiyonu ile program yazımına başlandıktan hemen sonra bu fonksiyon bir sağ parantez ile kapatılmaz. (defun ile başlayan ve ardından fonksiyon adının yazıldığı bu fonksiyon içinde, yapılacak işlemleri tanımlayan alt fonksiyonlar yer alır.

Örnek:
(defun toplama ( )
(setq A (getint "BİRİNCİ SAYIYI GİRİNİZ :" ))
(setq B (getint "İKİNCİ SAYIYI GİRİNİZ :" ))
(setq C (+ A B))
princ "nSONUÇ : " )
(princ C)
(princ)

Yukarıdaki örnekte ilk satır fonksiyonun başlangıç satırıdır. İkinci satır ile kullanıcıdan bir sayı girmesi istenir. Girilecek sayı tamsayıdır. Bu sayı A değişkenine atanır. Üçüncü satırda ikinci tamsayı istenir. Bu sayıda B değişkenine atanır. Dördüncü satırda ise girilmiş olan iki tamsayı toplama işlemine sokulur ve sonuç C değişkenine atanır. Beşinci satırda belirtilmiş olan fonksiyon sayesinde üçüncü satırda elde edilmiş olan sonuç ekranın komut alanına yazdırılır. Son satırdaki parantez ile de ilk satırda açılmış olan parantez kapatılır. Bu örnekte AutoLISP'in standart fonksiyonlarından olan setq ve princ fonksiyonlarının nasıl kullanılabileceğini görmüş olduk.

Hiç yorum yok: