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.
·         Listede elemanların boşluk içermemesi gerekir ; çünkü listede boşluk ,eleman ayırma
LİPS Programming LİPS Programming Reviewed by Unknown on 02:43 Rating: 5

Hiç yorum yok