18.06.2008 07:43    

ehya
Bu dersimizde lisp içinde değerleri ekrana yazdırırken uygulanacak işlemden bahsetmek istiyorum.

\n = Yazının yeni bir satıra yazılmasını sağlar

\t = Bir tab sağa geçirir.

\e = Escape yapılmasını sağlar.

\r = Enter

\\ = \ karakteri için kullanılır.



Yeni bir lisp yazmak istediğinizde lispiniz;

(defun c:ARCHME ()

şeklinde başlamalıdır. Bu satırı anlatmak gerekirse programın ana gövdesini başlattığımızı, lisp bittiğinde bu lispi ARCHME adıyla çalıştırabileceğimizi tarif ediyor. Burada “ARCHME” adıyla belirttiğim yere kendi lispinizin hangi komutla çalıştırmak istiyorsanız onu yazabilirsiniz.
Komut isminden öne c: diye bir yazı var. Bunun c sürücüsüyle bir alakası olmadığını belirteyim.

Lisp içinde her hangi bir değeri saklamak için ise; setq tanımını kullanmamız gerekiyor.

Örneğin;

getstring komutu ile bir metin kullanıcıya bir kelime yazdırtalım ve lisp içinde bu değeri saklayalım. Getstring tanımını bir sonraki yazımda tarif edeceğim.

(setq isim (getstring "\nİsminizi yazın:"))


Bu satırı çalıştırdığımızda komut satırında

Command: (setq isim (getstring "\nİsminizi yazın:"))

İsminizi yazın:

komut satırında yukarıda görüldüğü gibi uyarı gelecek. Burada isminizi yazdığınızda isminiz "isim" girdisi altında saklanacaktır.

Autocad ekranından bu girdilerin değerlerine bakmak istiyorsanız komut satırına !isim yazarak yani girdinin başına ünlem işareti koyarak değerini öğrenebilirsiniz.

Bir lispi yazarken unutulmaması gereken; ne kadar sol parantez varsa o kadar da sağ parantez olmalıdır. Yani açılan her fonksiyonun kapatması olmalıdır. Tabiki uygun yerlere.




Autolisp içinde en çok kullanılan işlemlerden birisi de liste fonksiyonudur. Lisp içinde birden fazla değeri tek bir liste içinde saklamak için kullanılır.

Örnek :

Command: (setq liste '( "elma" "portakal" "erik" "limon"))

Sonuç : ("elma" "portakal" "erik" "limon")


İleriki yazılarımda bu tür listelere müdahale ve işlemleri anlatacağım.


Bir lispi yazdıktan sonra yükleme yaparken, eğer hatalı bir yazım varsa yorumlayıcı tarafından en çok aşağıdaki uyarı mesajlarını alırsınız.

Extra right paren
Programın herhangi bir yerinde fazladan bir sağ parantezin olduğunu belirtir.

Malformed list on input
Programın herhangi bir yerinde eksik parantez ya da tırnak işaretinin olduğunu belirtir.

Bununla beraber birkaç uyarı mesajını ve anlamlarını belirteyim.

Divide by zero
Programın bir yerinde değer 0 (sıfır)’a bölünmeye çalışılıyor.

Bad node
TYPE fonksiyonu için geçersiz eleman tipi belirtilmiş.

Invalid argument
Hatalı argüman tanımlaması veya tanımlanan argüman sınırlar dışında kalmakta.

Invalid character
Bir deyim, uygun olmayan bir karakter içermekte.


Yazmış olduğunuz lispin autocad'in farklı dillerdeki sürümlerinde de çalışmasını istiyorsanız, command komutu ile kullandığınız autocad komutlarının başına “_” alt çizgi kullanmalısınız.

Örnek :

(command "_line" nok1 nokt2 "")


Bu dersimizi karakter işlem komutlarıyla ilgili birkaç örnek yaparak bitireceğim.

Toplama :
(+ 2 3 5)..........................Sonuç : 10


Çıkarma :
(- 50 20 2.5)....................Sonuç : 27.5


* Çarpma :
(* 3 2 2)..........................Sonuç : 12


/ Bölme :
(/ 60 2 3.0)......................Sonuç : 10.0


= Eşittir (equal)
(= 4 4.0)..........................Sonuç : T
(= "sen" "ben")...............Sonuç : nil
(= 12.0 12.0 12.0)..... .....Sonuç : T


= Eşit değil (not equal)
(/= 10 20)........................Sonuç : T
(/= "sen" "sen")...............Sonuç : nil


< Küçüktür (less than)
(< 10 20).........................Sonuç : T
(< "b" "c")........................Sonuç : T
(< 357 33.2).....................Sonuç : nil
(< 2 3 88).........................Sonuç : T


<= Küçük veya eşit ise (less than or equal to)
(<= 10 20)........................Sonuç : T
(<= "b" "b")......................Sonuç : T
(<= 357 33.2)...................Sonuç : nil
(<= 2 9 4 5)......................Sonuç : nil


> Büyüktür (greater than)
(> 120 17)........................Sonuç : T
(> "c" "b").........................Sonuç : T
(> 3.5 1792).....................Sonuç : nil
(> 77 4 2).........................Sonuç : T
(> 77 4 4).........................Sonuç : nil


>= Büyük veya eşit ise (greater than or equal to)
(>= 120 17)......................Sonuç : T
(>= "c" "c").......................Sonuç : T
(>= 3.5 1792)...................Sonuç : nil
(>= 77 4 4).......................Sonuç : T
(>= 77 4 9).......................Sonuç : nil


~ bitwise (tam sayının tersini alıp 1 azaltmak)
(~ 3).................................Sonuç : -4
(~ 100).............................Sonuç : -101
(~ -4)................................Sonuç : 3


1+ (arttırma)
(1+ 3)................................Sonuç : 4
(1+ 5)................................Sonuç : 6


1- (azaltma)
(1- 3).................................Sonuç : 2
(1- 5).................................Sonuç : 4



Bundan sonraki dersimizde auolisp'de kullanılan komutların tanımlarını örnekleriyle anlatacağım.

18.06.2008 09:24    

tekir06
teşekkürler usta

18.06.2008 14:19    

sahin460
teşekkürler helal sana ehya kardeş

26.06.2008 07:21    

KADIKIZI
sagolasın Ehya... eline emegine saglık

anlayamamaktan cok korkuyorum :D niyeyse :) (sınıfta kalma fobisi sanırım :P)

26.06.2008 07:38    

ehya
:) yok yok anlamamazlık olmayacağına eminim. Tüm dersleri tek format altında topluyorum. O yüzden 3ncü ders eklenmeyecek. Toplu halde göndereceğim. Bayağı bir örnek lisp yazıp tektek tariflerini yaptım. Hala da yazıyorum :)
Anlamadığınız yerde de tekrar soru sorabilirsiniz. Yine açıklamaya çalışırım..

21.09.2008 10:04    

mechanicaleng
ellerin det görmesin çok ii olmuş.

17.11.2008 16:24    

seyma_0034
anlatım teşekkürler ehya ama ben şu eşittir kısmından sonrakileri anlayamadım sonuç T sonuç nil gibi ifadeleri : ((

17.11.2008 21:25    

ehya
sonuç T demesi, yapılan işlemin doğru olduğunu nil sonucu yanlış olduğunu ifade eder.
Örneğin

(= 25 25)
bu satırın sonucu T dir. Yani işlem sonucu doğrudur.

(= 25 26)
bu işlem sonucunda da nil yani doğru olmadığını ifade eder.

17.11.2008 21:28    

fox
yani true nun "t" si

peki ehya bi soruda ben sorayım bende eşit değilden soruyorum.

(/= 10 20)........................Sonuç : T

şimdi burdaki işlem 10 u 20 ye böl = burayı anlamadım.

17.11.2008 22:29    

ehya
/= bölmek anlamına gelmiyor. Yukarıyı okusaydın keşke.
Bunun anlamı "eşit değil". 10 ile 20 eşit olmadığından T sonucunu veriyor.

18.11.2008 07:29    

seyma_0034
anladım ehya teşekkür ederim derslerin devamını merakla bekliyoruz..

18.11.2008 07:35    

fox
Alıntı
ehya :
/= bölmek anlamına gelmiyor. Yukarıyı okusaydın keşke.
Bunun anlamı "eşit değil". 10 ile 20 eşit olmadığından T sonucunu veriyor.



o zaman şöylemi diyoruz burdaki bölü işareti eşitliği bozan karakterdir.

18.11.2008 16:24    

ehya
/= fonksiyonunu ayrı bir şekilde düşünme. Bu iki karakterli fonksiyon bir bütündür. Başka bir kodlamada / fonksiyonunu diğer fonksiyona bağlayamazsın.

18.11.2008 17:08    

fox
ok olay anlaşılmıştır.

07.11.2009 07:50    

hüseyin_akgul
İyi günler yazılmış ve bilgisayara yüklenmiş bir lispi araç çubuklarında her hangi bir menünün altına getirmenin imkanı varmı... Cevabınız için şimdiden teşekkürler.

07.11.2009 08:06    

ehya
getirmenin imkanı var elbet.. ancak bunun için mnu dosyası hazırlanması gerekir k, zahmetli bir iştir...

10.11.2009 08:01    

aziz_ank
tesekkur ederim

25.04.2010 07:20    

cahid
HERKESE SELAM.LISP ICN VERDIYINIZ KOD LAIR NASIL KULLANICAGIMI BANADA OYRETIRMISINIZ?

25.04.2010 08:58    

beyto
paylaşım çok güzel devamını sabırsızlıkla bekliyoruz

> 1 <
Copyright © 2004-2022 SQL: 1.394 saniye - Sorgu: 98 - Ortalama: 0.01422 saniye