AutoLISP: Alt programlarla veri alışverişi
![]() |
Yazar | Prof. Dr. Günay Özmen |
| Mesleği | İ.T.Ü. İnşaat Fakültesi | |
| Yapı Anabilim Dalı | ||
| Bilsar Yön. Kurulu Bşk. | ||
| Yazar |
AutoLISP programlama dilindeki alt programlar üç grupta toplanabilir:
- Ana program içinde birkaç kez yinelenmesi gereken belirli deyimlerin (fonksiyonların) veya deyim gruplarının bir kez yazılmasını için düzenlenen Özel Amaçlı alt programlar,
- Ana programı belirli bölümlere ayırarak yazımı, anlaşılmayı ve test işlemlerini kolaylaştıran Mantıksal alt programlar,
- Bir kez yazılıp çeşitli ana programlarda kullanılan bağımsız Genel Amaçlı alt programlar.
Önceki yazımızda 1 ve 2. maddelerde belirtilen türden alt programların özellikleri açıklanmış ve bilgi alışverişi özellikleri irdelenmişti. Bu yazıda özellikle genel amaçlı alt programlarda bilgi alışverişi konusu ele alınacaktır.
Alt Programlara Bilgi Aktarılması
İlke olarak, ana programlardan alt programlara bilgi aktarılması Argümanlar aracılığı ile sağlanır. Ancak Özel Amaçlı ve Mantıksal alt programlara Global Değişkenler kullanılarak da bilgi aktarılabilmektedir. Genel Amaçlı alt programlara bilgi aktarılmasında ise sadece argümanlar kullanılır. Bu tür alt programlar çeşitli ana programlarda kullanılabilecekleri için, genel olarak, global değişkenlerden yararlanamazlar.
Ana Programlara Bilgi Aktarılması
AutoLISP dilindeki alt programlar “function” tipindedir, yani tek sonuç üretirler. Tüm argümanlar sadece giriş görevi üstlenirler. Bunlar, diğer programlama dillerindeki “subroutine-procedure” tipi alt programlarda olduğu gibi, ana programlar için değer üretemezler. Ancak Özel Amaçlı ve Mantıksal alt programlarda yine Global Değişkenler kullanılarak, istenen sayıda değişken için bilgi üretilebilmektedir.
Genel Amaçlı alt programlarda durum değişiktir. Bunlarda global değişkenler kullanılmadığından, bilgi üretimi sadece Son Satır’daki tek bilgi ile kısıtlanmıştır. Ana programa aktarılacak olan bu tek bilgi Atom veya Liste biçiminde olabilir. Aşağıda son satırdaki bu tek bilginin düzenlenmesi çeşitli örnekler üzerinde açıklanacak ve irdelenecektir.
Örnek 1: Ortalama Hesabı
N elemanlı bir A dizisine ait elemanların ortalaması

Fig.1
olarak tanımlanmıştır. Ortalama değeri hesaplayan genel amaçlı bir ortalama.lsp alt programı aşağıda gösterilen biçimde düzenlenebilir.

Fig.2
Görüldüğü gibi, argüman dışındaki tüm değişkenler yerel (local) olarak seçilmiştir. Bu uygulamanın genel amaçlı tüm alt programlar için geçerli olduğu söylenebilir.Çerçeve içine alınmış olan son satır, yukarıdaki ortalama formülünün AutoLISP dilinde yazılmasından ibarettir ve bir atom üretmektedir. Ana programda tanımlanmış olan herhangi bir X listesinin ortalaması
(setq XOR (ortalama X))
yazılarak elde edilebilir.
Belirtmek gerekir ki, liste elemanlarının toplamı (apply…) fonksiyonunu kullanarak tek bir satırda hesaplanabilir. Meraklı okuyucular bu uygulamayı deneyebilirler. Burada, genelleştirmeye olanak sağlamak amacı ile, (repeat…) çevrimi kullanılmıştır. Bu düzenle “Ağırlıklı Ortalama”, “Standart Sapma” vb. büyüklükler benzer biçimde kolayca hesaplanabilir.
Örnek 2: Orta Nokta
PA ve PB noktalarının ortasındaki noktayı saptayan genel amaçlı ortanokta.lsp alt programı aşağıda gösterilen biçimde düzenlenmiştir.

Fig.3
Bu alt programın son satırında atom değil, koordinatlardan oluşan bir liste üretilmektedir. Son satırda oluşan bu liste ana programa aktarılır. Ana programda tanımlanmış olan P1 ve P2 noktalarının ortasındaki POR noktası
(setq POR (ortanokta P1 P2))
yazılarak elde edilir.
Örnek 3: İkinci Derece Denkleminin Çözümü
Bilindiği gibi
![]()
Fig.4
ikinci derece denkleminin iki kökü

Fig.5
formülü ile hesaplanabilir. A, B ve C argümanlarını kullanarak, bu formül yardımı ile, X1 ve X2 köklerini hesaplayan genel amaçlı IkI.lsp programı aşağıda gösterilen biçimde düzenlenmiştir.

Fig.6
Görüldüğü gibi, burada da kullanılan değişkenlerin tümü yereldir. Ana programa iki adet değer (X1 ve X2) aktarılması gerekli olduğundan, son satırda bunlardan bir liste oluşturulmuş bulunmaktadır. Ana programda tanımlanmış olan AA, BB ve CC değerleri kullanılarak
(setq COZUM (iki AA BB CC)
yazılabilir. Köklerin değerleri de
(setq X1 (car COZUM))
(setq X2 (cadr COZUM))
yazılarak elde edilir.
Basitliği korumak amacı ile, IkI.lsp programında hesaplanan köklerin gerçel oldukları varsayılmış bulunmaktadır. Bu program kolayca genelleştirilerek köklerin hem gerçel hem de sanal bölümleri elde edilebilir.
Örnek 4: Liste Sıralama
Bir LST listesindeki elemanların küçükten büyüğe doğru sıralanması için düzenlenen genel amaçlı sort.lsp alt programı aşağıda gösterilmiştir.

Fig.7
Sıralamada en basit yöntemlerden biri olan “Kabarcık Sıralaması - Bubble Sort” yöntemi kullanılmış bulunmaktadır. Burada da LST argümanı dışındaki tüm değişkenler yerel (local) olarak seçilmiştir. Çerçeve içine alınmış olan son satırın alışılagelmiş AutoLISP deyimlerinden farklı olduğu ve buraya sadece LST listesinin yazılmış olduğu görülmektedir. Burada amaç bu son satırdaki sıralanmış LST listesini ana programa aktarmaktır. Ana programda tanımlanmış olan bir A listesinin sıralanması için
(setq AS (sort A))
yazmak yeterlidir. İstenirse
(setq A (sort A))
yazılarak A listesinin sıralanmış biçimi yine A listesinin içinde elde edilebilir.
Benzer Yazılar


