LİPS Programming
Sevgili okurlarım uzun bir aradan sonra tekrardan haberlerle ve bilgilendirmelerimle geri geldim. Bu gün size bahsetmek istediğim benimde yeni keşfettiğin LİPS programlama dili. Buyrun..
LISP
· Lisp Nedir ?
· Lisp’in Özellikleri
· Kullanılan LİSP Derleyicisi
· Lisp programlama dili
- Lisp Dilinin Yapısı
- Operatörler ve Atomlar
- Karşılaştırmalar
- Setf ve Setq Fonksiyonları
- Değişkenler(Local ve Global)
- Matematiksel İfadeler
- Listeler
- Lisp’te Fonksiyon Yapısı ve Built-in Fonksiyonlar
- Kontrol Yapısı ve Döngüler
- I/O Yapısı
- Diziler
- Lisp’te Yüksek Seviyeli Fonksiyonlar
Lisp Nedir?
· Lisp, 1958 yılında John McCarty tarafından geliştirilmiş en eski, ikinci üst seviye programlama dilidir.
· List Processing 'in (Liste İşleme) kısaltılmış ifadesidir.
· Çoğunlukla yapay zeka uygulamalarında kullanılmakla beraber birçok probleme etkin çözümler üretebilen modüler programlama dilidir.
· Diğer dillerin sunduğu birçok yararlı özelliğe sahiptir( structures, çok boyutlu diziler, nesneler, karakter katarları vs ).
· LISP, yüksek seviyeli programlama dillerinin bir çoğuna göre daha az sınırlayıcı syntax yapısına sahiptir.
Lisp’in Özellikleri
· Değişkenleri liste olarak kabul eder.
· Dinamiktir; kullandığınız veri tiplerinden fonksiyonlara kadar bütün girdiler(entry) her yönüyle değişebilmektedir. Esneklik sağlar.
· Değişken tipi tanımlamaya gerek yoktur. Programın çalışır hale gelmesi için kendisi belirler. (Implicit tanımlama)
· LİSP Context free gramerdir.
· Güvenlidir. Bütün olayları kontrol altında tutar, beklenmedik bellek hatalarına ve çakışmalara izin vermez.
· LİSP ; C ,C++’ta run time anında yapılması gereken bir çok şeyi compiler anında yapmaya izin verir.
· Hata bildirimi ve hata eleme için güçlü araçlar sunar.
· Lispte Garbage- Collection vardır ve bununla daha emniyetli daha kesin ve doğru hafıza yönetimi sağlarsınız.
· En az sınırlayıcı syntax’a sahip olması en önemli avantajlarındandır.
· Case sensitive değildir.İstediğiniz şekilde büyük ve küçük harf ayrımında özgürsünüz.
· Geliştirilmiş hata tutma sistemine sahiptir.
· Diğer modern diller gibi sınırlayıcı, bir sürü yazım biçimini zorlayıcı da değildir. Basit ve esnek bir yazımı vardır.
Lisp Dilinin Yapısı
· Parantezler LİSP dilinin temel yapısını oluşturlar.
Örnek:
(defun a()
(setq b 5)
(setq c 6)
(setq d (+ b c))
(print d)) =>b ve c‘ye atanan iki değeri toplayıp d’ye atan ve sonucu ekrana yazan program
· Kesme işareti veri girilmesi durumunda kullanılır. Kesme işareti kullanılarak komut kipinden çıkılarak veri kipine geçilmiş olur.
(setq a’(ali ahmet mehmet))
· LİSP dilinde bir ifadeye değer atamak o ifadenin değişken olması için yeterlidir.
· Bir değişkenin değerini, değişkene başka değer vererek değiştirebiliriz.Değişken integer iken bir anda float ya da daha farklı bir tip olabilir.
Örnek:
(defun degisken()
(setq a 3)
(setq a’sayı) )
Operatörler
· + toplama
· - çıkarma
· * çarpma
· / bölme
· Mod mod alma
Atomlar
· Lisp te 2 özel atom vardır. Bunlar: - t
- Nil’dir.
· t “true “ olarak telaffuz edilip doğruyu temsil etmektedir . Nil ise yanlış veya boş listeyi temsil etmektedir.
Karşılaştırmalar
· (= a b) => eşit mi
· (/= a b) => eşit değil mi
· (< a b) => a<b doğru mu?
· (> a b) => a>b doğru mu?
· (<= a b) => a<=b doğru mu?
· (>= a b) => a>=b doğru mu?
max ve min karşılaştırma fonksiyonları:
· (max 10 11) ==> 11
· (min -12 -10) ==> -12
· (max -1 2 -3) ==> 2
tek-çift kontrol fonksiyonları:
· (evenp a) => a çift mi? =>parametre integer olmalı
· (oddp a) => a tek mi? =>parametre integer olmalı
Setf ve Setq
· Setq: Basit bir setq kullanımına örnek olarak değişkenlere değer atama verilebilir. Örneğin aşağıdaki kodda a,b ve c değerlerine 0,1 ve 2 değerleri atanıyor.
>(setq a 0 b 1 c 2)
a => 0
b => 1
c => 2
setq nun diğer bir kullanımı da sıralı değerleri kullanarak güncelleştirmeler yapmaktır. Örneğin aşağıdaki kodda önceden tanımlanmış değerler ile yeni değerler oluşturulurken setq komutu kullanılmış.
>(setq a (1+ b) b (1+ a) c (+ a b))
a => 2
b => 3
c => 5
· Setf: setf komutu liste tanımlamasında kullanılır. Yukarıda tanımladığımız yapı üzerinde düşünürsek a değeri ilk başta 0 iken aşağıdaki setf komutu ile bu değeri 3 yapıyoruz.
>(setf a 3)
Lokal Değişkenler
Local değişkenler “let” ile tanımlanırlar.Diğer dillere benzer yöndetanımlandığı fonksiyonun parantezi dışındaki ifadeler bu local değişkene erişemezler.Farklı olarak aynı fonksiyonun içinde de bu değişkene erişilemez.
Örnek1:
(defun yaz ()
(let ((a 5))
(print a)) "erisebilir"
"(print a) --> hata erisemez.."
)
(defun yaz2()
"a lokal degiskenine ulasamaz"
(print a))
Ornek2;
(defun topla()
(let ((a 4)(b 4)(c 5))
(setq d (+ a b c)))
(print d)
)
(defun ulas()
"topla fonksiyonu calismadan yazamaz"
(print d))
Ornek3;
(defun v()
(print "1 sayi giriniz..")
(setq b(read))
(let ((a b)(b 3))
(setq d (+(* a 5) b))) "d=(a*5)+b demek"
(print d)
(print "b nin son haline dikkat")
(print b)
)
Global Değişkenler
· Global değişkenler :
Lisp’ deki global değişkenler , defparameter ve defvar ile tanımlanırlar.
Örnek :
>> ( defparameter x 120 )
X
>>x
120
>> ( defvar y 50 )
Y
>>Y
50
Defparameter ile tanımladığımız değişkenin değerini tekrar defparameter veya setq kullanarak değiştirebiliriz;fakat defvar kullanarak değiştiremeyiz.
Defvar ile tanımlanan değişkenin değeri ise tekrar defvar kullanılarak değiştirilemez. Ancak defparameter ile tekrar değiştirebiliriz.
Defvar ile tanımlanmış değişkenin değeri setq kullanılarak değiştirilebilir.
Örnek :
>> ( defvar y 555 )
Y
>>Y
555
>> ( setq y 304 )
Y
>> y
304
Programda değerinin zor değişmesini istediğimiz değişkenleri defvar ile tanımlamamız
daha doğru olacaktır.
Örnek:
(defparameter x 30)
(defun a()
(print x))
(defun b()
(defvar x 5) "x sayisi degistirilemedi"
(print x))
(defun c()
(defparameter x 333) "x sayisi degisti.."
(print x))
(defun d()
(setq x 222) "x sayisi degisti.."
(print x))
(defun e()
(defparameter x 123) "x sayisi degisti.."
(setq x 456) "x sayisi degisti.."
(defvar x 789) "x sayisi degismedi"
(print x))
Lisp’te Matematiksel Ifadeler
· Lispte matematiksel ifadeler java veya c’deki gibi int a=3+6; şeklinde yazılmaz.Bunun lispteki karşılığı tam olarak (setq a(+ 3 6)) şeklindedir.
Örneğin;
(defun islem1()
(setq sonuc(+(-(* 1 2)4)6)))
· İşlemi sonuc=(((1*2)-4)+6) ifadesine denk gelir.Benzer bir islemde daha gösterecek olursak;
(defun cikarma()
(- 9 3 5 1 2) ) işlemi sonuç olarak -2 verecektir.
· İfadelerden de anlaşılacağı gibi lispte operatörler sola dayalı yazılır ve önce parantez içleri işlem görür.Örnek verecek olursak;
(/ 6 (/ 3 2)) = (6 / (3/2)) =1
(-(+(* 1 2)9)4) = ((9+(1*2))-4 = 7
· (setq bol(/ 6 3 2)) = {bol = (6/3)/2} = 1
Burada dikkat edilecek nokta işlemlerin sola dayalı yapılacağıdır.
· Devam edersek;
(/ 5 3) =1.6666 değildir..(5/3) tür..
· (defun bolme1()
(/ 10 4) ) işleminin sonucu 5/2 dir.
· Fakat;
(/ 5.0 3) = 1.666667 olur.
Bolmede rasyonel değer sonuç almak yerine reel sayı almak istiyorsak argümanlardan birini reel yapmalıyız.
· (defun bolme2()
(setq s1(+(/ 5 3) 2))
(setq s2(+(/ 5.0 3) 2)) )
İfadesi için s1={11/3} iken s2=3.666667 dir.
· Hazır fonksiyonlara bakacak olursak;
· (sqrt 16) = 4 , (sqrt 34) = 5.830 “karekök”
· (expt 4 0.5) =2 , (expt 3 3) = 27 “genel”
· Örnek programa bakacak olursak;
(defun us(n m)
(expt n m) )
İfadesi genel bir üs alma ifadesidir. (us 16 0.5) diye çağırırsak 4 değerini döndürecektir.
· (random 5) à 0 ve 5 arası rastgele sayı üretir.
· (abs -8) = 8 àargümanın mutlak değerini alır.
( let x 2.67) için;
· (floor x) à 2 tabana göre yuvarlama yaptı.
· (ceiling x) à3 alabileceği en yüksek tamsayıya göre yuvarlama yapar.
· (round x) à 3 ondalıklı kısma göre yuvarlama yaptı.0.5 ten büyük olduğu için sonuç 3 oldu.
Listeler
· Listeler, belirli özelliklere göre oluşturulmuş nesneler kümesidir. Değişik amaçlar için kullanılabilirler.
· Listelerin önüne kesme işareti( ‘ ) konulur. Bu listeler ile fonksiyonların ayırt edilmesini sağlar.Gelen verinin fonksiyon değil de data olarak algılanmasını sağlar.
· Fonksiyonlarda olduğu gibi listeler de parantez içine yazılır.
· Listenin içeriği ve listede kaç tane değer olacağı hakkında bir sınırlama yoktur.
LİPS Programming
Reviewed by Unknown
on
02:43
Rating:
Hiç yorum yok