2) AutoLisp dosyalarının yapısı

cizimokulu.com - 13.10.2004 16:39
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.

Yazar: cizimokulu.com
İçerik:
Tag: autolisp dosyalarının yapısı, lisp, defun, prompt, setq

Yorumlar :
akocak   01.04.2021 14:31 #16071  

Mehmet Şahin Güvercin hocanın kitabını nasıl bulabilirim. Çok aradim ama yok. Lütfen yardım

yurtsan   16.09.2014 08:29 #15421  

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 mesaj atarmısınız

egö   05.10.2010 08:09 #13326  

(defun c:toplama()
(setq A(getint " Birinci sayıyı giriniz : "))
(setq B(getint " İkinci sayıyı giriniz : "))
(setq C (+ A B))
(princ " Sonuç : ")
(princ C)
(princ))

ile kod çalışır

katmerius   17.07.2010 14:41 #13105  

ehya ilgin için teşekküler.
(defun toplama()
(seqA (getint (“BİRİNCİ SAYIYI GİRİNİZ:”))
(seqB (getint (“İKİNCİ SAYIYI GİRİNİZ:”))
(seqC (+A B))
(princ (“nSONUÇ : ”))
(princ C)
(princ))
yazdım lispi yükledim.
komut satırına yolama yazdım.
Unknown command "TOPLAMA". Press F1 for help.
uyarısı aldım. hatam nerede....

ehya   17.07.2010 14:16 #13103  

yukarıdaki örnekte herhangi bir kodlama hatası yok..
lisp kod'unda " işareti unutsanız çalışmayacaktır. Bu konuda dikkat etmelisiniz.

katmerius   17.07.2010 14:06 #13102  

program daha test aşamasında bile hata veriyor. sorun nerde?

gölge   29.08.2008 12:44 #8967  

anlatımınız gerçekten iyi bana göre, çalışarak anlamak kitap okumaktan kolay geliyor, ama yukarıda yazdığınızda eksik var bu şekilde yazdığınızda sonucu göstermiyor.parantez yanlış yere konmuş şu şekilde çalıştırabilrsiniz

(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 "SONUÇ : " )
(princ C)
(princ))

yükledikten sonra command: satırına (toplama) yazmanız yeterli

ama komutu parantez içinde yazmak istemiyorsanız küçük bir değişiklik yapın

(defun c: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 "SONUÇ : " )
(princ C)
(princ))

command: satırına toplama yazarak lisp dosyasını çalıştırabilirsiniz.

Akif BIYIK

Copyright © 2004-2022 SQL: 0.06 saniye - Sorgu: 36 - Ortalama: 0.00166 saniye