18 Mart 2016 Cuma

Fonksiyonel Programlama Ve Scheme


   Fonksiyonel programlama, matematik fonksiyonlarıyla yapılır. Girdi ve çıktıları sabittir. Fonksiyon parametresi olarak aldığı girdileri işler ve sonuç döndürür. Bu sonuç sadece aldığı parametre ile değişmelidir.
   İmperative ve foksiyonel programlama yöntemleri vardır. İmperative programlamada atama ve döngü işlemleri kullanılır, ama fonksiyonel programlamada böyle bir şey yoktur. Fonksiyonel programlamada değişkene bir değer verildiğinde bir daha değişmez.
   Resimdeki gibi imperative kısmında atama ve döngü işlemleri yapılırken, fonksiyonel kısmında recursive işlemler yapılmıştır.
pd1.PNG
Özellikler
  • Referantial Transparency: Fonksiyon belli bir değer için bir tek değer üretir. Zamana veya başka koşullara göre oluşturulan değer değişmemelidir. Parametre almayan metodlar her zaman tek bir sonuç döndürür.
  • Fonksiyonlar başka fonksiyonlara parametre olabilir.
  • Composition: Birbiriyle ilişkili fonksiyonları birleştirmek. Örneğin; X -> Y  ve  Y -> X ise  X -> Z  yazılabilir.
Kalitesi
  • Parametre alması ve sonuç döndürmesi gerekir.
  • Atama ve döngü işlemleri kullanılmamalıdır.
  • Oluşturulan değer sadece aldığı parametrelere göre değişmelidir.

   

SCHEME: LISP'in Bir Biçimi

Lisp (List Processing  ), fonksiyonel programlamanın özelliklerini taşıyan ilk programlama dilidir. Kendi yorumlayısına sahiptir. Scheme, Lisp'in lehçesidir. Yorumlayıcı olarak kullanılan program Racket. Sheme dilinde prefix ifadeler kullanılır.
   
Scheme dilinde iki tür ifade vardır:
  1. Atoms : numara, string, boolean, karakter
  2. Parenthesized Expression : atom, expression
   
Scheme dilinde syntax:
→ : Atama
| : veya, alternatif ifade
{ } : liste
' ' : string ifadeler
;   : yorum satırı

Prefix işlemler:
(+ 3 5) = 3 + 5 = 8
(+ 3 ( * 4 5 ) )=  3 + 4 * 5 = 23
Boolean işlemler : 
( and ( =  a  b )  ( not  ( = a 0 ) ) )       ;   ( a = = b ) && ( a ! = 0 )

Özel fonksiyonlar:
 >> (gcd 10 35 )    ; gcd ( 10 35 )  en büyük ortak bölen bulur.
5
>>  (read- char )  ; getchar()
>> (quote ( 1 2 3 ) ) ; ifade değişmeden döndürülür.
'(1 2 3 )
>> if ( = a 0 )  0            ; if (a==0) return 0
          ( / 1 a )                  ; else return (1/a)
>>( cond ( (= a 0 ) 0)                  ; condition (if, else if , else yapısı) ; if( a==0  )  return 0
                  ( ( = a 1 ) 1)                 ; else if( a == 1 )   return 1
                  ( else ( / 1 a ) ) )        ; else return 1/a
>>(let (( a 2 )   ( b 3 ) ) ( + 1 b ) )       ;  let komutu ifadeye değer bağlar. ( + 1 b) işlemi                                                                            ;  sadece let ifadesi içinde yapılır. 
4
>>(lambda   (radius)  (*   3 .14  ( * radius radius ) ) ) 10)
   ;  lambda komutu isimsiz  fonksiyon oluşturmayı sağlar.
   ; radius aldığı parametre
   ; 10 sayısı da parametrenin değeri 
314
>> letrec                ; recursive fonksiyonları bağlar.
> > define              ; global tanımlama yapar.
   Tail Recursive : Kuyruk özyinelemesi olarak çevrilebilir. Recursive işleminin en sonda yapılmasıdır. Scheme tail recursive fonksiyonları imperative fonksiyonlara çevirerek daha verimli çalışmasını sağlıyor.
**Scheme dili delayed özelliğine sahiptir. Yani bir kod yapısı sadece ihtiyaç duyulduğunda çalışır. Aksi halde çalışmaz. Örneğin if - else yapısında if kontrolü doğruysa else kısmını hiçi çalıştırmaz.
** Scheme statically scoped bir dildir, yani kaynak kodu yazarken hataları tespit eder, çalışma esnasında değil.

Scheme' de Veri Yapıları

Scheme dilinde temel veri yapısı listelerdir. Listelerde işlemleri hızlıca yapmamızı sağlayan metodlar vardır.
car : listenin ilk elemanını döndürür.
cdr : ilk elemanından sonrakileri döndürür.
cons : listenin başına eleman ekler.
Binary Search Tree (İkili Arama Ağacı)
("horse" ("cow" () ("dog" () ()))
("zebra" ("yak" () ()) () ))
ifadelerinin ikili arama ağacı üzerinde gösterimi:
scheme3

Box and Pointer Notation 
list( 1 2 3 ) 'ün gösterimi :
scheme1

list (  ( a b )  c  ( d ) ) ' ün gösterimi :
scheme2


14 Mart 2016 Pazartesi

Python Öğreniyorum

Python 1989 yılında, Guido Van Rossum geliştirmeye başlamıştır. Guido en sevdiği gösteri Monty Python’s Flying Circus isminden python ismini seçmiştir. Öğrenmesi kolay bir dil olduğundan programlamaya yeni başlayanlar için tavsiye edilir.
Python konuşma diline yakın, yüksek seviyeli programlama dilidir. Geliştirilirken kolay okunabilir olmasına dikkat edilmiştir. Yorumlamalı(interpreted) bir dildir. Yani yazılan kod önce yorumlayıcının ana formatına çevrilir, sonra makina diline çevrilir. Girintilere göre sözdizimi vardır. Girintileme, parantezler yerine geçer ve kolay yazılmasını sağlar. Girinti sayısı azaltıldığında kod blogu bitmiştir.Çok sayıda kütüphanesi bulunur. Bu önemli bir özelliğidir. Tüm platformlarda (windows,linux, mac gibi) sorunsuz çalışabilir.
Python Kurulumu
Konsol ekranında kodlama yapabilirsiniz. Phyton 2x ve 3x sürümü mevcuttur. Birçok kütüphane 2x sürümü ile uyumlu çalışır.
Pycharm Kurulumu
Pycharm, python dilinde geliştirme yapabiliceğiniz bir platformdur.

Python'ı Cmd'ye Tanıtmak

Windows komut satırı olan cmd ile python'da programlama yapabilirsiniz. Bunun için cmd'ye indirmiş olduğunuz python.exe dosyasını tanıtmanız gerekir.
  Şimdi işlemleri sırasıyla yapalım:
1.Öncelikle python.exe dosyasını bulun. C klasöründe, python dosyası içinde bulunur. Dosyayı bulduğunuzda, dosya yolunu kopyalayın.
python.PNG
2.Bu bilgisayar klasörünü sağ tıklayıp, özelliklere girin.
python1
3.Gelişmiş sistem ayarlarını tıklayın.
pthon2
4.Ortam değişkenlerini tıklayın.
python3
5.Sistem değişkenlerinde path kısmını çift tıklayın.
python4
6. Açılan yerde değişken değeri kısmının sonuna noktalı virgül ( ; ) ekleyip kopyaladığınız dosya yolunu yapıştırın.
python5

7. Şimdi cmd'yi açıp python yazın ve programlamaya başlayın.
python6.PNG