Koşullu Durumlar
(If) ile koşullu işlemler yapmak mükündür.
(if (koşullu işlem)
(xyz doğru ise lisp komutu)
(xyz yanlış ise lisp komutu)
)
Aşağıdaki basit bir örneğe bakınız.
(defun c:testif( )
(setq a (getreal "\nBir sayı giriniz : ")
b (getreal "\nİkinci sayıyı giriniz : ")
); setq
(if (= a b)
(prompt "\nHer iki sayı eşittir")
(prompt "\nHer iki sayı eşit değildir.")
(princ)
);defun
(princ)
Eğer doğru veya yanlış durumunda birden fazla komut çalışacak ise (progn) komutu kullanılır.
(if (koşullu işlem)
(progn
(xyz doğru ise lisp komutu)
(xyz doğru ise başka bir lisp komutu)
); doğru bitti
(progn
(xyz yanlış ise lisp komutu)
(xyz yanlış ise başka lisp komutu)
); yanlış bitti
)
Birden fazla komut olan if örneği aşağıdadır.
(defun c:testprogn ()
(setq a (getreal "\nBir sayı giriniz : ")
b (getreal "\nİkinci sayıyı giriniz : ")
);setq
(if (= a b)
(progn
(prompt "\nHer iki sayı eşit")
(prompt "\nBurada başka bir komut var")
(prompt "\nBuradada başka bir")
);progn
(prompt "\nHer iki sayı eşit değil")
);if
(princ)
);defun
(princ)
(if) içinde AND, OR ve NOT gibi mantıksal operatörler kullanılabilir.
AND OR NOT
(and
(mantıksal işlem)
(mantıksal işlem)
); and
(or
(mantıksal işlem)
(mantıksal işlem)
); or
(not
(mantıksal işlem)
); not
AND ve OR operatörü örneği
(defun c:testand ()
(setq a (getreal "\nEnter a Number : "))
(if
(and
(>= a 5.0)
(<= a 10.0)
);and
(prompt "\nNumber is between 5 and 10")
(prompt "\nNumber is less than 5 or greater than 10")
);if
(princ)
);defun
(princ)
(defun c:testor ()
(setq a (getstring "\nAre you Male? Y/N : "))
(if
(or
(= a "y")
(= a "Y")
);or
(prompt "\nHello Sir")
(prompt "\nHello Madam")
);if
(princ)
);defun
(princ)
İlişkisel operatörler iki yada daha fazla sayının ilişkisini belirler
< daha küçük
> daha büyük
<= daha küçük veya eşit
>= daha büyük veya eşit
= eşit
/= eşit değil
eq iki ifade aynıdır
equal iki ifade eşittir
(Eq) örneği
(setq a '(x y z))
(setq b '(x y z))
(setq c b)
(eq a c) nill değer döndürürse, a ve c benzer liste değildir.
(eq c b) true değer döndürürse, b ve c benzer listedir.
(Equal) örneği
(setq a '(x y z))
(setq b '(x y z))
(setq c b)
(setq m 1.123456))
(setq n 1.123457))
(equal a c)
(equal c b)
(equal m n)
(equal m n 0.000001)
Çoklu if fonksiyonu (cond)
Birden fazla koşula göre birden fazla ifade çalışması gerektği durumda (if) yerine (cond) fonksiyonu kullanılır.
(cond) fonksiyonu örneği aşağıdadır. Buradanda gürülebileceği gibi 3 ayrı koşula bağlı 3 ayrı ifade vardır. Bu üç koşuldan hiçbiri true değer vermezse en alttaki T koşulundaki ifade çalışır.
(defun c:testcond ()
(setq a
(strcase (getstring "\nCivata Seç (M10,M12,M16): ")
);strcase
);setq
(cond
((= a "M10") (prompt "\nM10 seçtiniz"))
((= a "M12") (prompt "\nM12 seçtiniz"))
((= a "M16") (prompt "\nM16 seçtiniz"))
(T (prompt "\nBilinmeyen civata seçtiniz"))
);cond
(princ)
);defun
(princ)