Programlama Dili Prensipleri. Lab Notları 8 ve 9

Benzer belgeler
Pythonda değişkenlerin türlerini tanımlamaya gerek yoktur

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

BİL-142 Bilgisayar Programlama II

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Yapay Zekâ Dersi. Final Soruları A KİTAPÇIĞI. Güz,

Bilgisayar Programlama MATLAB

Programlama Dili Prensipleri. Lab Notları 4

LABORATUVAR ÇALIŞMASI 1 - Python a Giriş

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

Aşağıdaki programı inceleyip ekrana ne yazacağını söyleyebilir misiniz?

Sunum İçeriği. Programlamaya Giriş

k ise bir gerçek sayı olsun. Buna göre aşağıdaki işlemler Matlab da yapılabilir.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BİL-142 Bilgisayar Programlama II

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

Temel Bilgisayar Programlama

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

VERİ TABANI ve YÖNETİMİ

C++ Dilinde Bazı Temel Algoritmalar

EXCEL DE ARİTMETİKSEL İŞLEMLER

C#(Sharp) Programlama Dili

PROGRAMLAMA DİLLERİ I

Veri Yapıları Laboratuvarı

NESNEYE YÖNELİK PROGRAMLAMA

Algoritma ve Programlamaya Giriş

MatLab. Mustafa Coşar

Android Ders Notları

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

1.1. Yazılım Geliştirme Süreci

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

ALGORİTMALAR. Turbo C Bilgisayarda Problem Çözme Adımları. Bilgisayarda Problem Çözme Adımları.

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

ALGORİTMA VE PROGRAMLAMA I

BİLGİSAYAR PROGRAMLAMA MATLAB

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

10 LU SAYISAL SİSTEMİ İLE 2 Lİ SAYISAL SİSTEMİ ARASINDA ÇEVİRİM UYGULAMASI

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır.

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

NB Macro Kullanımı Hakkında Genel Bilgiler

BİLGİSAYAR PROGRAMLAMA DERSİ

EM205 26/9/2014. Programlamaya giriş Algoritmalar. Amaçlar

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

HSancak Nesne Tabanlı Programlama I Ders Notları

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

BİLGİSAYAR PROGRAMLAMA DERSİ

Lambda İfadeleri (Lambda Expressions)

Akış Kontrol Mekanizmaları

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

1. PROGRAMLAMAYA GİRİŞ

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

Her Select Case bloğu, mutlaka End Select ile bitmek zorundadır.

ÖDEV (Vize Dönemi) CEVAPLAR. 1. Ekrana Merhaba Dünya! yazdıran algoritmanın akış diyagramını çiziniz ve sözde kod olarak yazınız.

Bölüm 9. Altprogramlar ISBN

BMT 101 Algoritma ve Programlama I 7. Hafta. Yük. Müh. Köksal Gündoğdu 1

YUVARLAMA FONKSİYONLARI

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

C Programlama Dilininin Basit Yapıları

Fonksiyonlar (Altprogram)

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Print Komutu ile Değişkenleri Yazdırmak

Lab Notları 4. for ( ilklenme yeri bir kez çalışır ; Kontrol yeri her döngüde bakılır ; Güncelleme yeri her döngüde )

İnternet Programcılığı Dersi 2.Dönem Ders Notu

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

HSancak Nesne Tabanlı Programlama I Ders Notları

Nesne Tabanlı Programlama

Nesne Tabanlı Programlama

int faktoriyel(int sayi) { int sonuc = 1; for(int i=sayi;i>0;i--) sonuc*=i; return sonuc; } int main() { int sayi = faktoriyel(5); }

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

ÜNİT E ÜNİTE KONTROL DEYİMLERİ KARAR YAPILARI. IF Deyimi GİRİŞ

AVRASYA UNIVERSITY. Dersin Verildiği Düzey Ön Lisans (X ) Lisans ( ) Yüksek Lisans( ) Doktora( )

4. Bölüm Programlamaya Giriş

HSancak Nesne Tabanlı Programlama I Ders Notları

Dr. Fatih AY Tel: fatihay@fatihay.net

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

Genel Kullanılış 1: [değişken ismi] = [değişken ismi] [işlem] [sayı veya string ifade veya değişken]

ALGORİTMA VE PROGRAMLAMA I

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

HSancak Nesne Tabanlı Programlama I Ders Notları

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Kabuk Programlama (Bash)

2. Dereceden Denklemin Köklerini Bulan Program

BİLİŞİM TEKNOLOJİLERİ 6. SINIF DERS NOTLARI 2

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 9

SIMAN KULLANIM KILAVUZU

Transkript:

Programlama Dili Prensipleri Lab Notları 8 ve 9 Fonksiyonel Programlama Fonksiyonel programlamada bir fonksiyon aynı parametreler aldığı sürece aynı sonucu üretecektir. Daha çok yapay zeka için kullanılan bu diller, benzetim (simülasyon) uygulamalarında da görülebilir. Bu diller sadece fonksiyonlar üzerine kurulmuş modelleri gerçekleştirebilirler. Fonksiyonlar birden çok parametre alabilir ama geriye sadece bir değer döndürürler. Fonksiyonlar kendilerini çağırabilecekleri gibi başka fonksiyonları da çağırabilir ve başka fonksiyonların gövdeleri olabilirler. Bu dillerde alt yordamlar fonksiyonlar kullanılarak alt parçalar bölünmelidir. Lisp Programlama Dili Lisp dili sembolik veri işleme amacı ile tasarlanmıştır. Karmaşık hesaplamaları daha basit ifadeler cinsinden yazarak kolaylıkla çözümlenmesini sağlar. Lisp programlama dili sadece iki veri yapısı içerir. Bunlar Atom ve Listedir. Atom denilen veri yapısı sembollerden oluşabileceği gibi sayısal değerlerden de oluşabilir. Lisp esas olarak yorumlayıcı kullanan bir dildir. Derleyici kullanan versiyonları da vardır. (Örnek: GNU Common Lisp) İlk program: Ekrana merhaba yazmak. Lisp programlama dilinde fonksiyon tanımlamaları Defun kelimesi ile yapılır. Ve her komut parantez içerisinde yazılmalıdır. Nasıl Derlenir: Normalde yukarıdaki komutu direk GNU Common Lisp in siyah ekranına yazıp enter tuşuna bastığınızda ekrana Merhaba yazdığını göreceksiniz. Fazla satırlı fonksiyonlar ile uğraşıldığında siyah ekran yazıyı bir yere kaydetmediği için tekrar tekrar yazmak zaman kaybına neden olacaktır. Bunun yerine uzantısı.lisp olan bir dosyaya kaynak kodu yazıp, dosyayı siyah ekrandan yüklemek daha doğru olacaktır. Lisp komut satırını açıp (load C:/Users/MFA/Desktop/Lab8ve9/Lisp/merhaba.lisp ) komutunu giriyoruz. Böylelikle MerhabaYaz fonksiyonunu tanıtmış oluyoruz. Komut satırında Finish loading yazması gerekiyor. Denemek için komut satırına (MerhabaYaz) komutunu girdiğimizde bu MerhabaYaz fonksiyonunu çağır demektir. Sonuç ekranda çıkacaktır. Bu kısma kadar yaptığımız işlem yorumlama işlemi idi. İstersek yazdığımız kaynak kodu derleyip çıktı dosyası oluşturabiliriz. Bunun için yazılacak komut: (compile-file C:/Users/MFA/Desktop/Lab8ve9/Lisp/merhaba.lisp ) Yukarıdaki komut girildikten sonra eğer kaynak kodda bir hata yoksa merhaba.lisp ile aynı klasörde merhaba.o dosyası oluşacaktır. Bu dosya merhaba.lisp dosyası ile aynı yöntemle siyah ekrana okutulup içindeki fonksiyonlar tanıtılabilir. Bu dosyanın merhaba.lisp dosyasından farkı çıktı dosyası olup içeriğinin görüntülenemiyor oluşudur. 1

Lisp Programlama Dilinde Matematiksel İşlemler Matematiksel işlemlerin gerçekleştirilmesi diğer programlama diline benzemektedir. Fakat Lisp programlama dilinde söz dizimsel ifade prefixtir. Yani 10+15 şeklinde diğer programlama dillerinde topladığınız ifadeyi Lisp programlama dilinde (+ 10 15) şeklinde yazmalısınız. Örnek: Dört işlemi gerçekleştiren Lisp kodu Yukarıdaki kodda normalde print yazılmasa da ekrana sonucu yazar fakat arka arkaya fonksiyonlar çağrıldığı için sadece en sondaki ekrana yazmasın diye her çağrımdan sonra sonuç ekrana yazdırılmıştır. 2

Örnek: Kullanıcıdan değer alınması Aşağıdaki kodda görüldüğü gibi bir değişkene değer atamak için kullandığımız setq ifadesinin sol tarafına read komutunu verirsek, değişkene kullanıcıdan aldığı değeri atayacaktır. setq ile birden çok değişkene değer atanabilir. Örneğin (setq x 10 y 32) gibi. Bir değişkenin değerini bir arttırma veya bir azaltmak için diğer programlama dillerinde ++ ve operatörleri kullanılır. Lisp programlama dilinde ise arttırmak için (incf x) kullanılır. Bu durumda x in değeri 1 artacaktır. Aynı şekilde (decf x) denildiğinde x in değeri 1 azalacaktır. (rotatef x y) komutunu verdiğinizde x ve y nin değerlerini değiştirir. Değiştirdikten sonra ekrana nil yazar. (#b001) komutu yazılan 0 ve 1 lerin ikili bir ifade olduğunu belirtir ve ekrana onun 10 tabanındaki halini yazar örneğin (#b001) ekrana 3 yazacaktır. Bölme işleminde diğer programlama dillerinde olduğu gibi işleme giren sayılar tam sayı ise sonuç ondalık çıkacaksa bile ekrana tam halini yazacaktır. Örneğin (/ 1 2) komutu ekrana 1/2 yazar ki kullanıcı açısından bir şey ifade etmez. Fakat sayılardan birini ondalık sayıya çevirirsek yani (/ 1 2.0) yaptığımızda sonuçta ondalık olacağı için ekrana 0.5 yazacaktır. #c ifadesi yazılacak sayının karmaşık sayı olduğunu belirtir. Örneğin (+ #c(1 2) #c(5 2)) yazdığınızda ekrana iki karmaşık sayının toplamını yani #c(6 4) yazacaktır. Lisp Programlama Dilinde Kontrol Blokları Diğer programlama dillerine benzer olarak kontrol blokları if ifadesi ile gerçekleştirilir. Fakat yine bağlaç operatörleri (and ve or gibi) prefix şeklinde yerleşecektir. Örnek: Girilen yaş değerinin 2 ile 18 arasında olup olmadığını kontrol ediyor. Yukarıdaki kod bloğunda T doğruyu ifade ederken nil yanlışı ifade etmektedir. 3

Örnek: Verilen üç sayıdan en büyüğünü bulan fonksiyon. Lisp Programlama Dilinde Döngüler - For Döngüsü: Aşağıya ya da yukarı doğru saydırılabilir. Örnek: 1 den 10 a kadar ekrana tam sayıları yazmak. Örnek: Girilen sayıya kadar tersten tek sayıları yazdırmak Yukarıdaki kod bloğunda /= ifadesi eşit değil operatörüdür. Yani diğer programlama dillerinde kullanılan!= gibi bir operatördür. mod ifadesi ise pascalda olduğu gibi sayının modunu alır. Örnek: Faktöriyel Lisp kodu 4

Örnek: Fibonacci hesabını özyineleme olmadan hesaplama - Fonksiyonlarda opsiyonel parametre tanımlama Yukarıdaki kod bloğunda &optional ifadesinden sonra gelen tüm parametreler opsiyoneldir. Yukarıdaki fonksiyon çağrıldığında x y ve z elemanlarından oluşan bir liste oluşturur. Eğer y veya z veya her ikisi girilmedi mi girilen kadar liste oluşturacak gerisini nil yapacaktır. Örneğin fonksiyon (fonk 5) şeklinde çağrılabilir bu durumda ekranda (5 nil nil) yazacaktır. Fakat yukarıdaki fonksiyonu y yi opsiyonel bırakıp z ye bir değer vererek çağırmak mümkün olmamaktadır. Bu durumda &key ifadesinden faydalanabiliriz. Yukarıdaki fonksiyonda şöyle bir çağrım yapıldığında (fonk :x 3 :z 5) parametre opsiyonel geçilir ve üçüncü parametreye 5 değeri verilir. ilk parametreye 3, ikinci Aynı if içerisinde birden çok komut çalıştırılmak isteniyorsa hepsi aynı paranteze alınır ve başlarına progn komutu getirilir. 5

Örnek: Yukarıdaki kod bloğunda NickAta metoduna isim parametre olarak gönderilmez ise boş bir isim oluşturulup 123 string i ile birleştiriliyor. String birleştirme işleminde concatenate komutu kullanılmaktadır. Listeler: Listeler lisp programlama dilinde büyük rol oynar. Örneğin 4 elemanlı A isminde bir liste tanımlamak için, (defparameter *A* (list 1 2 3 4)) (first *A*) komutu listenin ilk elemanını getirecektir, yani ekrana 1 yazacaktır. (rest *A*) komutu listenin o andaki konumundan sonrasını getirecektir, yani ekrana (2 3 4) yazacaktır. İki farklı liste append komutu ile birleştirilebilir. (append *A* *B*) komutu A listesinin sonuna B listesini ekleyecektir. Bir listeyi reverse komutu ile tersine çevirebilirsiniz. (setq *A* (reverse *A*)) Listede bir eleman aramak için find komutu kullanılır. Eğer listede aranan eleman yoksa nil döndürecektir. Var ise elemanı döndürecektir. (find 4 *A*) Listedeki bir elemanın konumunu döndürmek için position komutu kullanılır. Yukarıdaki liste örneği düşünüldüğünde aşağıdaki kod ekrana 1 getirecektir. Çünkü 2 elemanı 1. index te. (position 2 *A*) Listedeki bir elemanı silmek için delete komutu kullanılır. Yukarıdaki liste örneği düşünüldüğünde aşağıdaki kod 4 ü silecektir. 6

(delete 4 *A*) İki listenin eşit olup olmadığını karşılaştırmak için eq komutu kullanılır. Eşit ise T, değil ise nil dönecektir. (eq *a* *b*) Bir liste düğümünde verinin olduğu bölüm lisp programlama dilinde car ile ifade edilir. Diğer düğümü gösteren bölüm ise cdr ile ifade edilir. Örnek: Listenin belirli bir konumuna eleman ekleme Yukarıdaki ekle fonksiyonu parametre olarak bir liste, elemanı ekleyeceği konum ve elemanı almaktadır. Daha sonra push komutunu kullanarak elemanı eklemektedir. Yukarıdaki metot lisp e tanıtıldıktan sonra bir liste tanımı yapılırsa, (defparameter *p* (list 1 2 3 4)) daha sonra, (Ekle *p* 1 10) 1. indeks e 10 sayısını ekleyecektir. Listenin yeni görünümü (1 2 10 3 4) olacaktır. Örnek: Listenin belirli bir konumundan eleman çıkarma Yukarıdaki kod bloğunda subseq parametre olarak verilen listenin belirtilen index inden başlayarak sona kadar alt bir liste oluşturur. Hazırlayan Arş. Gör. M. Fatih ADAK 7