SlideShare a Scribd company logo
1 of 42
LISPLISPLİSPPROGRAMLAMADİLİ
Lisp Hakkında
Lisp, Fortran'dan sonra ikinci en eski yüksek düzeyli
programlama dilidir ve ilk günlerinden çoğu özelliği
değişmişir.
Günümüzde en çok bilinen genel amaçlı Lisp lehçeleri
Common Lisp ve Scheme'dir.
Lisp, 1958'de Massachusetts Institute of Technology'de
(MIT) John McCarthy tarafından icat edilmiştir.
Neden Lisp?
• Çünkü yapay zeka programlama için vazgeçilmezdir
• Çoğu dilde olmayan yeni yapıları bünyesinde
barındırır
• Fonksiyonel programlamayı destekler.
• Nesne tabanlı programlamayı destekler.
• Lambda calculus yazılımı destekler.
Ön Şartlar
• Bu eğitimde ön şart olarak bir bilgisayar programı ve
programlama dili nedir sorusunun cevabını biliyor
olarak kabul edilmektesiniz.
Common Lisp’in Özellikleri
• Makine-bağımsızdır
• İteratif tasarım yapılabilir ayrıca kolayca genişlitilebilir.
• Programların dinamik olarak güncellenmesine izin verir.
• Gelişmiş nesne yönelimli programlama sağlar.
• Geniş kontrol yapıları sağlar.
• Nesneler, yapılar, listeler, vektörler, ayarlanabilir diziler,
karma tablolar ve simgeler gibi geniş kapsamlı veri türleri
sağlar.
Lisp İle Yapılmış Uygulamalar
• Emacs
• G2
• Autocad
• Yahoo Store
LISP – Kurulum için gerekenler
• Text Editorü(Windows Notepad,vi,Brief,Emacs)
*Uzantılarımız .lisp olmalıdır
• Lisp yorumlayıcı(executer)
• CLISP
CLISP
• Lisp executer(çalıştırıcıdır).
• Windows versiyonunu aşağıdaki linkten indirip
kurabilirsiniz.
http://sourceforge.net/projects/clisp/files/latest/download
CLISP NASIL KULLANILIR?
• Yukarıdaki işlemi tamamlayıp clisp’i kurduktan sonra
clisp kendini PATH variable olarak işletim sistemine
ekleyecektir.
• Dosyalarımız *.lisp yada *.lsp dosya uzantısında
olmalı
• Örnek: clisp hello.lisp
LISP PROGRAM YAPISI
• Lisp ifadeleri sembolik ifadeler yada s-ifadeler olarak
bilinir.
• S-ifadeleri üç geçerli nesneden oluşur bunlar;
• Atoms(Atomlar)
• Lists(Listeler)
• Strings(Karakter Katarı)
• Herhangi bir s ifadesi geçerli program olarak kabul edilir
• Lisp programları compiler(derleyici) yada
yorumlayıcı(interpreter) ile yürütülür
LISP PROGRAM YAPISI 2
• Lisp yorumlayıcısı kayak kodu kontrol eder ve kodu
döngü içine alarak kodu okur,işler ve yazdırır.
• Read(Oku),Eval(İşle),Print(Yazdır) LOOP (REPL)
• Basit Bir Program Örneği [Yorumlayıcı için]:
• (+7 9 11) Çıktı -> 27
• Aynı çıktıyı compiler ile elde etmek için:
• (write( +7 9 11))
(write (+ 7 9 11))
Lisp Programlarının
Değerlendirilmesi
• İki aşamadan oluşur.
• 1.)Bir çevirici yardımı ile text editörde yazılmış lisp
kodları lisp nesnelerine dönüştürülür
• 2.)Kodların dildeki anlamı(semantiği) değerlendirici
program tarafından gerçekleştirilir.
Değerlendirici Program Nasıl Çalışır?
• Değerlendirici kod’da bulunan stringleri lisp nesnelerine
yada s-ifadelerine dönüştürür.
• Değerlendirici s-ifadelerinin lisp formatında syntax(söz
biçimini) tanımlar bu ikinci aşamada hangi s-ifadelerinin
lisp formunda olduğunu belirler
• Değerlendirici bir fonksiyon gibi çalışarak parametre
olarak geçerli lisp formu alır ve bir değer döndürür.
• Ayrıca bu ifadelerimizi neden parantezler içinde
yazdığımızında cevabıdır bu sayede tüm ifadeyi/formu
değerlendirici programa bir parametre olarak veriyoruz.
LISP PREFIX
• Lisp programlama dili prefix notation kullanır.Bir
önceki slaytta gördüğümüz örnekteki gibi operatörler
operandlarından önce yazılır.
• Örnek : ifadesini olarak
yazmalıyız.
a * ( b + c ) / d (/ (* a (+ b c) ) d)
Klasik Hello World Programı
• (write-line "Hello World")
• (write-line "Lisp Ögreniyorum")
Temel Syntax(Sözdizimi)
Lisp’in Temel Yapıtaşları
•1.)Atom:Atom veri tipi içinde
alfanümerik(sayı,harf,özel karakter) bulundurabilir.
• Örnek:name,12346789,*hello*,-wpram734-
•2.)List:List veri tipi içinde sıralı olarak atom veya
başka listeler bulundurur.
• Örnek:(i am a list), ,
•3.)String:String veri tipi çift tırnak arasında bulunan
karakter gruplarını içinde barındırır.
• Örnek:"i am a string"
(a ( a b c) d e fgh) ( )
Lisp’te Yorum Satırı
• Lisp’te yorum satırı oluşturmak için « ; » noktalı
virgülü kullanırız.Örneğimize bakalım.
Yorum Satırı Örneği
• (write-line "Hello World") ; greet the world;
• ;tell them your whereabouts
• (write-line "I am at 'Tutorials Point'! Learning LISP")
Mutlaka Bilmeniz Gerekenler!
• Lispte’ki basit sayısal operatörler = * , - , * ve /
• Fonksiyon çağırma biçimi f(x) yerine -> (f x) : Örnek(cos 45)
• Lisp’te büyük küçük harf ayrımı yoktur cos 45 = COS 45 ‘tir.
• LISP, bir fonksiyonun argümanları da dahil olmak üzere her şeyi
değerlendirmeye çalışır. Sadece üç tür sabittir ve her zaman kendi
değerlerini verirler.Bunlar;
• Numbers (Sayılar)
• « t » harfi mantıksal true(doğru) ifade eder
• « nil » mantıksal false(yanlış) veya listeler için empty(boş) ifade eder.
Lisp - Veri Tipleri
• Lisp’te değişkenlerin tipi yoktur fakat veri nesnelerinin tipi
vardır.
• Veri tiplerini ayıracak olursak;
• Scalar Tipler:Sayılar,Karakterler,Semboller,v.b
• Veri Yapıları:Listeler,Vektörler,Stringler
« typep » ifadesi, bir nesnenin belirli bir türe
ait olup olmadığını bulmada kullanılır.
« type-of » ifadesi, belirli bir nesnenin veri
türünü döndürür.
Lisp Veri Tipleri -2
Bu tanımlı türlerin dışında, kendi veri türlerinizi oluşturabilirsiniz. Veri
yapısı «defstruct» ifadesi kullanılarak tanımlanır.
Veri Tipleri Örnekleri
• Örnek 1
Executing the program....
$clisp
main.lisp 10
34.567
123.78
NIL
110000.0
62
Veri Tipleri Örnekleri
•Örnek 2
Executing the program....
$clisp main.lisp
(INTEGER 0 281474976710655)
SINGLE-FLOAT
SINGLE-FLOAT
NULL
SINGLE-FLOAT
(INTEGER 0 281474976710655)
Lisp - Değişkenler
• LISP'de, her değişken bir sembol ile temsil edilir.
• Değişkenin ismi sembolün adıdır ve sembolün
gösterdiği hafıza hücresinde saklanır.
• Global Değişkenler
• Global değişkenler program boyunca hafıza’da kalır.
• Genel değişkenler genellikle «defvar» ifadesi ile tanımlanır.
• Örnek:(defvar x 234) (write x) -> 234
Lisp – Değişkenler 2
• LISP'deki değişkenler için tür bildirimi olmadığından,
« setq » ifadesi ile bir sembol için doğrudan bir değer
belirtirsiniz
• Ayrıca « let » ve « prog » ifadelerini kullanarakta
değişken tanımlayabiliriz.
Örnek
(setq x 10) 10
(write x)
Lisp – Sabitler
• LISP'de sabitler, program yürütülürken değerleri asla
değişmeyen değişkenlerdir.
• Sabitler « defconstant » ifadesi kullanılarak tanımlanır
Executing the program....
$clisp main.lisp
Radius: 10.0
Area: 314.1592
Lisp – Operatörler
• LISP'deki operatörleri kategorize edersek;
• Aritmetik operatörler(+,-,*,/,mod,rem,incf,decf)
• Karşılaştırma operatörler(=,/=,>,<,>=,<=,max,min)
• Mantıksal operatöler(and,or ,not)
• Bit düzeyinde operatörler(logand, logior, logxor, lognor, logeqv)
Executing the program....
$clisp main.lisp
Radius: 10.0
Area: 314.1592
Lisp – Karar Yapıları
• LISP'deki karar yapıları;
• Cond : Bu yapı, birden fazla test-action cümleciklerini kontrol etmek
için kullanılır. Diğer programlama dillerinde iç içe geçmiş if ifadelerine
benzerdir.
• If:Koşul sağlanırsa if bloğu işletilir sağlanmaz ise devam edilir.
• When:Koşul ifadesi doğru ise işlem yapılır, aksi takdirde programa
devam edilir.
• Case:Bu yapı, cond yapısı gibi birden fazla koşul doğru ise işle şeklinde
çalışır. Bununla birlikte, anahtarları(keys)değerlendirir ve çoklu seçim
ifadesini oluşturur.Switch-case ‘ yapısına benzer
Lisp – Karar Yapıları
Örnekleri
• Cond Syntax:
• If Syntax:
(cond (test1 action1) (test2 action2) ... (testn actionn))
Executing the program....
$clisp main.lisp
value of a is 10
(if (test-clause) (action1
) (action2
))
Executing the program....
$clisp main.lisp
value of a is 10
Lisp – Karar Yapıları
Örnekleri
• When Syntax:
• Case Syntax:
(when (test-clause) (<action1
) )
Executing the program....
$clisp main.lisp
a is greater than 20 value of a is 100
(case (keyform) ((key1) (action1
action2
...) ) ((key2) (action1
action2
...) ) ... ((keyn) (action1
action2
...) ))
Executing the program....
$clisp main.lisp
Thursday
Lisp – Döngüler
• «Loop» ifadesi: Lisp’de bilinen en basit döngü ifadesidir koşul
sağlandığı sürece işlenir
• «Loop for» ifadesi:Diğer programlama dillerindeki for loop’una
çok benzer.
• «do» ifadesi:Diğer programlama dillerindeki do while’a benzer
• «dotimes» ifadesi:Dotimes yapısı, ifadeyi sabit sayıda
çalıştırmayı sağlar.
• «dolist» ifadesi:Listenin üzerindeki her elemana iteratif olarak
erişmeyi sağlar.For each yapısına benzer.
Lisp – Döngü Örnekleri
• «Loop» Syntax:
• «Loop for» Syntax:
(loop (s-expressions))
12
13
14
15
16
17
18
(loop for loop-variable in <a list>
do (action)
)
(loop for loop-variable from value1 to
value2
do (action)
)
TOM DICK HARRY
Lisp – Döngü Örnekleri 2
• «do» Syntax:
• «do list Syntax» (dolist (n '(1 2 3 4 5 6 7 8 9)) )
• «do times örnek»
(dotimes (n 11)
(print n) (prin1 (* n n)))
(do ((variable1
value1
updated-value1
) (variable2
value2
updated-value2
)
(variable3
value3
updated-value3
) ...) (test return-value) (s-expressions) )
x = 0 y = 20
x = 2 y = 18
x = 4 y = 16
x = 6 y = 14
x = 8 y = 12
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
Lisp – Fonksiyonlar
• «Fonksiyon» Syntax:
• Notlar:
• Parametre olarak boş bir liste gönderebilirsiniz; bu, fonksiyonun
argüman almadığı anlamına gelir, boş liste « ( ) » olarak yazılır.
• Ayrıca return-from ifadesini kullanarak işlevden fonksiyondan geriye
değer döndürebilirsiniz.
(defun fonksiyonadı (parametreler) . Fonksiyon
gövdesi)
25
Lisp – Tahminler
• Tahminler, bazı özel koşullar için argümanlarını test eden ve
koşul doğru ise non nil(nil olmayan) değer, koşul yanlış ise nil
değerini döndüren fonksiyonlardır.
• Atom:Bir bağımsız değişken alır ve bağımsız değişken bir atom ise t
(true) döndürür, aksi takdirde nil(0,false) döndürür.
• Equal:İki bağımsız değişkeni alır ve eğer değerler birbirine eşitse
t(true) değilse nil (false) döndürür.
• Eq:İki bağımsız değişkeni alır bunlar denk nesnelerse, aynı bellek
konumunu gösteriyorlarsa t(true) aksi durumda nil(sıfır) döndürür
Lisp – Tahminler 2
• Evenp:Bir sayısal değişken alır ve argüman çift ise t(true), aksi takdirde
0 döndürür.
• Oddp:Bir sayısal değişken alır ve argüman tek ise t(true), aksi takdirde 0
döndürür.
• Zerop:Bir sayısal değişken alır ve değişken sıfır ise t(true) döndürür aksi
takdirde 0 döndürür.
• Null:Bir argüman alır ve argüman nil ise t(true) döndürür, aksi takdirde
nil(0) döndürür.
• Listp:Bir argüman alır ve argüman liste ise t(true) döndürür, aksi
takdirde nil(0) döndürür.
Lisp – Tahminler 3
• Greaterp:Bir veya daha fazla parametre alır ve tek bir bağımsız
değişken varsa veya birden fazla değişken varsa ve bu parametreler
soldan sağa doğru artarak gidiyorsa (3 4 5) gibi t(true) döndürür aksi
takdirde nil(0) döndürür.
• Lessp:Bir veya daha fazla parametre alır ve tek bir bağımsız değişken
varsa veya birden fazla değişken varsa ve bu parametreler soldan sağa
doğru azalarak gidiyorsa (5 4 3) gibi t(true) döndürür aksi takdirde
nil(0) döndürür.
• Numberp:Bir parametre alır eğer parametre sayı(number) ise t(true)
döndürür aksi takdirde nil(0) döndürür.
• Symbolp:Bir parametre alır eğer parametre sembol(symbol) ise t(true)
döndürür aksi takdirde nil(0) döndürür.
• İntegerp: Parametre integer ise t(true) değilse nil(0) döndürür.
Lisp – Tahminler 4
• rationalp:Bir parametre alır eğer parametre rasyonel sayı ise t(true)
değilse nil(0) döndürür.
• floatp:Bir parametre alır eğer parametre float ise t(true) değilse nil(0)
döndürür.
• Complexp:Bir parametre alır eğer parametre karmaşık sayı ise t(true)
değilse nil(0) döndürür.
• Characterp:Bir parametre alır eğer parametre karakter ise t(true)
değilse nil(0) döndürür
• Stringp:Bir parametre alır eğer parametre string ise t(true) değilse
nil(0) döndürür.
• Arrayp:Bir parametre alır eğer parametre array ise t(true) değilse nil(0)
döndürür.
Lisp – Sayılar
• Integers:Tamsayılar
• Ratios:Oranlar
• Floating-point numbers:Kayan sayılar
• Complex numbers:Karmaşık sayılar
Lisp – Sayılar Örnek 1
1/2
5/4
#C(4 -2)
Sayılar İle İlgili Fonksiyonlar: Sin,Cos,exp(üs alma),sqrt(karekök) vb
Lisp – Karakterler(Chars)
• # işareti:Lisp’de karakterlerimizin önüne «#» işaretini getirmeliyiz
• Örnek:(write-char #a) Çıktı -> a
• Özel Karakterler:Özel karakterleri nasıl yazdıracağımızın cevabı ise çok basit örneğin
space (boşluk) yazdırmak için # SPACE yazmalıyız
Diğer özel karakterlere bakarsak ne demek istediğimiz daha iyi anlaşılacaktır.
#Backspace
#Tab
#Linefeed
#Page
Lisp – Karakterler Üzerindeki
Karşılaştırma Fonksiyonları
•Lisp’de ‘ < ‘, ‘ > ‘ gibi büyüktür küçüktür gibi sayı operandları üzerinde
işlem yapar, bu operatörler karakterler üzerinde çalışmaz kısacası ‘<‘ ,
‘>’ operatörleri karakterler için aşırı yüklenmiş operatörler değillerdir.
•Lisp’de bazı karakter üzerindeki karşılaştırma fonksiyonları büyük küçük
harf duyarlı(case-sensetive) bazıları ise büyük küçük harf duyarsız(case-
insensetive)’dir.Bir sonraki slaytımızda bu fonksiyonlara bakacağız.
Lisp – Karakterler Üzerindeki
Karşılaştırma Fonksiyonları 2
Büyük Küçük Harf
Duyarlı Fonksiyonlar
Büyük Küçük Harf
Duyarsız
Fonksiyonlar
İşlevi
char= char-equal Operandlar birbirine tamamen
eşit ise true döndürür aksi
durumda nil döndürür.
char/= char-not-equal Operandlar birbirine eşit
değilse true aksi durumda nil
döndürür
char&#60;= char-not-greaterp Soldaki herhangi bir operand
kendinden sonraki operand
değerinden büyük veya eşit ise
true aksi takdir nil döndürür
char>=
 
char-not-lessp Soldaki herhangi bir operand
kendinden sonraki operand
değerinden küçük veya eşit ise
true aksi takdir nil döndürür

More Related Content

What's hot

Siber Guvenlik ve Etik Hhacking -2-
Siber Guvenlik ve Etik Hhacking -2-Siber Guvenlik ve Etik Hhacking -2-
Siber Guvenlik ve Etik Hhacking -2-Murat KARA
 
Siber Güvenlik ve Etik Hacking Sunu - 7
Siber Güvenlik ve Etik Hacking Sunu - 7Siber Güvenlik ve Etik Hacking Sunu - 7
Siber Güvenlik ve Etik Hacking Sunu - 7Murat KARA
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLCommand Prompt., Inc
 
Zabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões RegularesZabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões RegularesHenrique Haag Ribacki
 
Zararlı Yazılım Analizi (ÖZET)
Zararlı Yazılım Analizi (ÖZET)Zararlı Yazılım Analizi (ÖZET)
Zararlı Yazılım Analizi (ÖZET)Alper Başaran
 
Linux Kullanım Rehberi
Linux Kullanım RehberiLinux Kullanım Rehberi
Linux Kullanım RehberiMert Can ALICI
 
Siber Güvenlik ve Etik Hacking Sunu - 12
Siber Güvenlik ve Etik Hacking Sunu - 12Siber Güvenlik ve Etik Hacking Sunu - 12
Siber Güvenlik ve Etik Hacking Sunu - 12Murat KARA
 
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondKernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondAnne Nicolas
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Alexey Lesovsky
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3Angel Boy
 
Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего Pavel Veinik
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...Cisco Russia
 
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013Sergey Petrunya
 
Bash shell
Bash shellBash shell
Bash shellxylas121
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形yoku0825
 
LTM essentials
LTM essentialsLTM essentials
LTM essentialsbharadwajv
 

What's hot (20)

Siber Guvenlik ve Etik Hhacking -2-
Siber Guvenlik ve Etik Hhacking -2-Siber Guvenlik ve Etik Hhacking -2-
Siber Guvenlik ve Etik Hhacking -2-
 
Siber Güvenlik ve Etik Hacking Sunu - 7
Siber Güvenlik ve Etik Hacking Sunu - 7Siber Güvenlik ve Etik Hacking Sunu - 7
Siber Güvenlik ve Etik Hacking Sunu - 7
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
Zabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões RegularesZabbix e o Mistério das Expressões Regulares
Zabbix e o Mistério das Expressões Regulares
 
Zararlı Yazılım Analizi (ÖZET)
Zararlı Yazılım Analizi (ÖZET)Zararlı Yazılım Analizi (ÖZET)
Zararlı Yazılım Analizi (ÖZET)
 
Linux Kullanım Rehberi
Linux Kullanım RehberiLinux Kullanım Rehberi
Linux Kullanım Rehberi
 
Siber Güvenlik ve Etik Hacking Sunu - 12
Siber Güvenlik ve Etik Hacking Sunu - 12Siber Güvenlik ve Etik Hacking Sunu - 12
Siber Güvenlik ve Etik Hacking Sunu - 12
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
BTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
BTRİSK Web Uygulama Güvenliği Denetimi EğitimiBTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
BTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
 
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondKernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
 
Linux
Linux Linux
Linux
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
 
Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего Software craftsmanship meetup 21: CQRS что такое и для чего
Software craftsmanship meetup 21: CQRS что такое и для чего
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...
 
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013
MySQL/MariaDB query optimizer tuning tutorial from Percona Live 2013
 
Bash shell
Bash shellBash shell
Bash shell
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
 
LTM essentials
LTM essentialsLTM essentials
LTM essentials
 

Lisp Türkçe Notlarım V_1

  • 2. Lisp Hakkında Lisp, Fortran'dan sonra ikinci en eski yüksek düzeyli programlama dilidir ve ilk günlerinden çoğu özelliği değişmişir. Günümüzde en çok bilinen genel amaçlı Lisp lehçeleri Common Lisp ve Scheme'dir. Lisp, 1958'de Massachusetts Institute of Technology'de (MIT) John McCarthy tarafından icat edilmiştir.
  • 3. Neden Lisp? • Çünkü yapay zeka programlama için vazgeçilmezdir • Çoğu dilde olmayan yeni yapıları bünyesinde barındırır • Fonksiyonel programlamayı destekler. • Nesne tabanlı programlamayı destekler. • Lambda calculus yazılımı destekler.
  • 4. Ön Şartlar • Bu eğitimde ön şart olarak bir bilgisayar programı ve programlama dili nedir sorusunun cevabını biliyor olarak kabul edilmektesiniz.
  • 5. Common Lisp’in Özellikleri • Makine-bağımsızdır • İteratif tasarım yapılabilir ayrıca kolayca genişlitilebilir. • Programların dinamik olarak güncellenmesine izin verir. • Gelişmiş nesne yönelimli programlama sağlar. • Geniş kontrol yapıları sağlar. • Nesneler, yapılar, listeler, vektörler, ayarlanabilir diziler, karma tablolar ve simgeler gibi geniş kapsamlı veri türleri sağlar.
  • 6. Lisp İle Yapılmış Uygulamalar • Emacs • G2 • Autocad • Yahoo Store
  • 7. LISP – Kurulum için gerekenler • Text Editorü(Windows Notepad,vi,Brief,Emacs) *Uzantılarımız .lisp olmalıdır • Lisp yorumlayıcı(executer) • CLISP
  • 8. CLISP • Lisp executer(çalıştırıcıdır). • Windows versiyonunu aşağıdaki linkten indirip kurabilirsiniz. http://sourceforge.net/projects/clisp/files/latest/download
  • 9. CLISP NASIL KULLANILIR? • Yukarıdaki işlemi tamamlayıp clisp’i kurduktan sonra clisp kendini PATH variable olarak işletim sistemine ekleyecektir. • Dosyalarımız *.lisp yada *.lsp dosya uzantısında olmalı • Örnek: clisp hello.lisp
  • 10. LISP PROGRAM YAPISI • Lisp ifadeleri sembolik ifadeler yada s-ifadeler olarak bilinir. • S-ifadeleri üç geçerli nesneden oluşur bunlar; • Atoms(Atomlar) • Lists(Listeler) • Strings(Karakter Katarı) • Herhangi bir s ifadesi geçerli program olarak kabul edilir • Lisp programları compiler(derleyici) yada yorumlayıcı(interpreter) ile yürütülür
  • 11. LISP PROGRAM YAPISI 2 • Lisp yorumlayıcısı kayak kodu kontrol eder ve kodu döngü içine alarak kodu okur,işler ve yazdırır. • Read(Oku),Eval(İşle),Print(Yazdır) LOOP (REPL) • Basit Bir Program Örneği [Yorumlayıcı için]: • (+7 9 11) Çıktı -> 27 • Aynı çıktıyı compiler ile elde etmek için: • (write( +7 9 11)) (write (+ 7 9 11))
  • 12. Lisp Programlarının Değerlendirilmesi • İki aşamadan oluşur. • 1.)Bir çevirici yardımı ile text editörde yazılmış lisp kodları lisp nesnelerine dönüştürülür • 2.)Kodların dildeki anlamı(semantiği) değerlendirici program tarafından gerçekleştirilir.
  • 13. Değerlendirici Program Nasıl Çalışır? • Değerlendirici kod’da bulunan stringleri lisp nesnelerine yada s-ifadelerine dönüştürür. • Değerlendirici s-ifadelerinin lisp formatında syntax(söz biçimini) tanımlar bu ikinci aşamada hangi s-ifadelerinin lisp formunda olduğunu belirler • Değerlendirici bir fonksiyon gibi çalışarak parametre olarak geçerli lisp formu alır ve bir değer döndürür. • Ayrıca bu ifadelerimizi neden parantezler içinde yazdığımızında cevabıdır bu sayede tüm ifadeyi/formu değerlendirici programa bir parametre olarak veriyoruz.
  • 14. LISP PREFIX • Lisp programlama dili prefix notation kullanır.Bir önceki slaytta gördüğümüz örnekteki gibi operatörler operandlarından önce yazılır. • Örnek : ifadesini olarak yazmalıyız. a * ( b + c ) / d (/ (* a (+ b c) ) d)
  • 15. Klasik Hello World Programı • (write-line "Hello World") • (write-line "Lisp Ögreniyorum")
  • 16. Temel Syntax(Sözdizimi) Lisp’in Temel Yapıtaşları •1.)Atom:Atom veri tipi içinde alfanümerik(sayı,harf,özel karakter) bulundurabilir. • Örnek:name,12346789,*hello*,-wpram734- •2.)List:List veri tipi içinde sıralı olarak atom veya başka listeler bulundurur. • Örnek:(i am a list), , •3.)String:String veri tipi çift tırnak arasında bulunan karakter gruplarını içinde barındırır. • Örnek:"i am a string" (a ( a b c) d e fgh) ( )
  • 17. Lisp’te Yorum Satırı • Lisp’te yorum satırı oluşturmak için « ; » noktalı virgülü kullanırız.Örneğimize bakalım. Yorum Satırı Örneği • (write-line "Hello World") ; greet the world; • ;tell them your whereabouts • (write-line "I am at 'Tutorials Point'! Learning LISP")
  • 18. Mutlaka Bilmeniz Gerekenler! • Lispte’ki basit sayısal operatörler = * , - , * ve / • Fonksiyon çağırma biçimi f(x) yerine -> (f x) : Örnek(cos 45) • Lisp’te büyük küçük harf ayrımı yoktur cos 45 = COS 45 ‘tir. • LISP, bir fonksiyonun argümanları da dahil olmak üzere her şeyi değerlendirmeye çalışır. Sadece üç tür sabittir ve her zaman kendi değerlerini verirler.Bunlar; • Numbers (Sayılar) • « t » harfi mantıksal true(doğru) ifade eder • « nil » mantıksal false(yanlış) veya listeler için empty(boş) ifade eder.
  • 19. Lisp - Veri Tipleri • Lisp’te değişkenlerin tipi yoktur fakat veri nesnelerinin tipi vardır. • Veri tiplerini ayıracak olursak; • Scalar Tipler:Sayılar,Karakterler,Semboller,v.b • Veri Yapıları:Listeler,Vektörler,Stringler « typep » ifadesi, bir nesnenin belirli bir türe ait olup olmadığını bulmada kullanılır. « type-of » ifadesi, belirli bir nesnenin veri türünü döndürür.
  • 20. Lisp Veri Tipleri -2 Bu tanımlı türlerin dışında, kendi veri türlerinizi oluşturabilirsiniz. Veri yapısı «defstruct» ifadesi kullanılarak tanımlanır.
  • 21. Veri Tipleri Örnekleri • Örnek 1 Executing the program.... $clisp main.lisp 10 34.567 123.78 NIL 110000.0 62
  • 22. Veri Tipleri Örnekleri •Örnek 2 Executing the program.... $clisp main.lisp (INTEGER 0 281474976710655) SINGLE-FLOAT SINGLE-FLOAT NULL SINGLE-FLOAT (INTEGER 0 281474976710655)
  • 23. Lisp - Değişkenler • LISP'de, her değişken bir sembol ile temsil edilir. • Değişkenin ismi sembolün adıdır ve sembolün gösterdiği hafıza hücresinde saklanır. • Global Değişkenler • Global değişkenler program boyunca hafıza’da kalır. • Genel değişkenler genellikle «defvar» ifadesi ile tanımlanır. • Örnek:(defvar x 234) (write x) -> 234
  • 24. Lisp – Değişkenler 2 • LISP'deki değişkenler için tür bildirimi olmadığından, « setq » ifadesi ile bir sembol için doğrudan bir değer belirtirsiniz • Ayrıca « let » ve « prog » ifadelerini kullanarakta değişken tanımlayabiliriz. Örnek (setq x 10) 10 (write x)
  • 25. Lisp – Sabitler • LISP'de sabitler, program yürütülürken değerleri asla değişmeyen değişkenlerdir. • Sabitler « defconstant » ifadesi kullanılarak tanımlanır Executing the program.... $clisp main.lisp Radius: 10.0 Area: 314.1592
  • 26. Lisp – Operatörler • LISP'deki operatörleri kategorize edersek; • Aritmetik operatörler(+,-,*,/,mod,rem,incf,decf) • Karşılaştırma operatörler(=,/=,>,<,>=,<=,max,min) • Mantıksal operatöler(and,or ,not) • Bit düzeyinde operatörler(logand, logior, logxor, lognor, logeqv) Executing the program.... $clisp main.lisp Radius: 10.0 Area: 314.1592
  • 27. Lisp – Karar Yapıları • LISP'deki karar yapıları; • Cond : Bu yapı, birden fazla test-action cümleciklerini kontrol etmek için kullanılır. Diğer programlama dillerinde iç içe geçmiş if ifadelerine benzerdir. • If:Koşul sağlanırsa if bloğu işletilir sağlanmaz ise devam edilir. • When:Koşul ifadesi doğru ise işlem yapılır, aksi takdirde programa devam edilir. • Case:Bu yapı, cond yapısı gibi birden fazla koşul doğru ise işle şeklinde çalışır. Bununla birlikte, anahtarları(keys)değerlendirir ve çoklu seçim ifadesini oluşturur.Switch-case ‘ yapısına benzer
  • 28. Lisp – Karar Yapıları Örnekleri • Cond Syntax: • If Syntax: (cond (test1 action1) (test2 action2) ... (testn actionn)) Executing the program.... $clisp main.lisp value of a is 10 (if (test-clause) (action1 ) (action2 )) Executing the program.... $clisp main.lisp value of a is 10
  • 29. Lisp – Karar Yapıları Örnekleri • When Syntax: • Case Syntax: (when (test-clause) (<action1 ) ) Executing the program.... $clisp main.lisp a is greater than 20 value of a is 100 (case (keyform) ((key1) (action1 action2 ...) ) ((key2) (action1 action2 ...) ) ... ((keyn) (action1 action2 ...) )) Executing the program.... $clisp main.lisp Thursday
  • 30. Lisp – Döngüler • «Loop» ifadesi: Lisp’de bilinen en basit döngü ifadesidir koşul sağlandığı sürece işlenir • «Loop for» ifadesi:Diğer programlama dillerindeki for loop’una çok benzer. • «do» ifadesi:Diğer programlama dillerindeki do while’a benzer • «dotimes» ifadesi:Dotimes yapısı, ifadeyi sabit sayıda çalıştırmayı sağlar. • «dolist» ifadesi:Listenin üzerindeki her elemana iteratif olarak erişmeyi sağlar.For each yapısına benzer.
  • 31. Lisp – Döngü Örnekleri • «Loop» Syntax: • «Loop for» Syntax: (loop (s-expressions)) 12 13 14 15 16 17 18 (loop for loop-variable in <a list> do (action) ) (loop for loop-variable from value1 to value2 do (action) ) TOM DICK HARRY
  • 32. Lisp – Döngü Örnekleri 2 • «do» Syntax: • «do list Syntax» (dolist (n '(1 2 3 4 5 6 7 8 9)) ) • «do times örnek» (dotimes (n 11) (print n) (prin1 (* n n))) (do ((variable1 value1 updated-value1 ) (variable2 value2 updated-value2 ) (variable3 value3 updated-value3 ) ...) (test return-value) (s-expressions) ) x = 0 y = 20 x = 2 y = 18 x = 4 y = 16 x = 6 y = 14 x = 8 y = 12 0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
  • 33. Lisp – Fonksiyonlar • «Fonksiyon» Syntax: • Notlar: • Parametre olarak boş bir liste gönderebilirsiniz; bu, fonksiyonun argüman almadığı anlamına gelir, boş liste « ( ) » olarak yazılır. • Ayrıca return-from ifadesini kullanarak işlevden fonksiyondan geriye değer döndürebilirsiniz. (defun fonksiyonadı (parametreler) . Fonksiyon gövdesi) 25
  • 34. Lisp – Tahminler • Tahminler, bazı özel koşullar için argümanlarını test eden ve koşul doğru ise non nil(nil olmayan) değer, koşul yanlış ise nil değerini döndüren fonksiyonlardır. • Atom:Bir bağımsız değişken alır ve bağımsız değişken bir atom ise t (true) döndürür, aksi takdirde nil(0,false) döndürür. • Equal:İki bağımsız değişkeni alır ve eğer değerler birbirine eşitse t(true) değilse nil (false) döndürür. • Eq:İki bağımsız değişkeni alır bunlar denk nesnelerse, aynı bellek konumunu gösteriyorlarsa t(true) aksi durumda nil(sıfır) döndürür
  • 35. Lisp – Tahminler 2 • Evenp:Bir sayısal değişken alır ve argüman çift ise t(true), aksi takdirde 0 döndürür. • Oddp:Bir sayısal değişken alır ve argüman tek ise t(true), aksi takdirde 0 döndürür. • Zerop:Bir sayısal değişken alır ve değişken sıfır ise t(true) döndürür aksi takdirde 0 döndürür. • Null:Bir argüman alır ve argüman nil ise t(true) döndürür, aksi takdirde nil(0) döndürür. • Listp:Bir argüman alır ve argüman liste ise t(true) döndürür, aksi takdirde nil(0) döndürür.
  • 36. Lisp – Tahminler 3 • Greaterp:Bir veya daha fazla parametre alır ve tek bir bağımsız değişken varsa veya birden fazla değişken varsa ve bu parametreler soldan sağa doğru artarak gidiyorsa (3 4 5) gibi t(true) döndürür aksi takdirde nil(0) döndürür. • Lessp:Bir veya daha fazla parametre alır ve tek bir bağımsız değişken varsa veya birden fazla değişken varsa ve bu parametreler soldan sağa doğru azalarak gidiyorsa (5 4 3) gibi t(true) döndürür aksi takdirde nil(0) döndürür. • Numberp:Bir parametre alır eğer parametre sayı(number) ise t(true) döndürür aksi takdirde nil(0) döndürür. • Symbolp:Bir parametre alır eğer parametre sembol(symbol) ise t(true) döndürür aksi takdirde nil(0) döndürür. • İntegerp: Parametre integer ise t(true) değilse nil(0) döndürür.
  • 37. Lisp – Tahminler 4 • rationalp:Bir parametre alır eğer parametre rasyonel sayı ise t(true) değilse nil(0) döndürür. • floatp:Bir parametre alır eğer parametre float ise t(true) değilse nil(0) döndürür. • Complexp:Bir parametre alır eğer parametre karmaşık sayı ise t(true) değilse nil(0) döndürür. • Characterp:Bir parametre alır eğer parametre karakter ise t(true) değilse nil(0) döndürür • Stringp:Bir parametre alır eğer parametre string ise t(true) değilse nil(0) döndürür. • Arrayp:Bir parametre alır eğer parametre array ise t(true) değilse nil(0) döndürür.
  • 38. Lisp – Sayılar • Integers:Tamsayılar • Ratios:Oranlar • Floating-point numbers:Kayan sayılar • Complex numbers:Karmaşık sayılar
  • 39. Lisp – Sayılar Örnek 1 1/2 5/4 #C(4 -2) Sayılar İle İlgili Fonksiyonlar: Sin,Cos,exp(üs alma),sqrt(karekök) vb
  • 40. Lisp – Karakterler(Chars) • # işareti:Lisp’de karakterlerimizin önüne «#» işaretini getirmeliyiz • Örnek:(write-char #a) Çıktı -> a • Özel Karakterler:Özel karakterleri nasıl yazdıracağımızın cevabı ise çok basit örneğin space (boşluk) yazdırmak için # SPACE yazmalıyız Diğer özel karakterlere bakarsak ne demek istediğimiz daha iyi anlaşılacaktır. #Backspace #Tab #Linefeed #Page
  • 41. Lisp – Karakterler Üzerindeki Karşılaştırma Fonksiyonları •Lisp’de ‘ < ‘, ‘ > ‘ gibi büyüktür küçüktür gibi sayı operandları üzerinde işlem yapar, bu operatörler karakterler üzerinde çalışmaz kısacası ‘<‘ , ‘>’ operatörleri karakterler için aşırı yüklenmiş operatörler değillerdir. •Lisp’de bazı karakter üzerindeki karşılaştırma fonksiyonları büyük küçük harf duyarlı(case-sensetive) bazıları ise büyük küçük harf duyarsız(case- insensetive)’dir.Bir sonraki slaytımızda bu fonksiyonlara bakacağız.
  • 42. Lisp – Karakterler Üzerindeki Karşılaştırma Fonksiyonları 2 Büyük Küçük Harf Duyarlı Fonksiyonlar Büyük Küçük Harf Duyarsız Fonksiyonlar İşlevi char= char-equal Operandlar birbirine tamamen eşit ise true döndürür aksi durumda nil döndürür. char/= char-not-equal Operandlar birbirine eşit değilse true aksi durumda nil döndürür char&#60;= char-not-greaterp Soldaki herhangi bir operand kendinden sonraki operand değerinden büyük veya eşit ise true aksi takdir nil döndürür char>=   char-not-lessp Soldaki herhangi bir operand kendinden sonraki operand değerinden küçük veya eşit ise true aksi takdir nil döndürür