2. 2
Amaç
• Dil öğretmek değil. Bu derste, programlama dillerinin temel kavramları ve bu kavramlar
için çeşitli dillerde sağlanan yapılar incelenecektir. Tanıtılan kavramları örneklemek için,
Pascal, C, C++, Java, Lisp, Prolog gibi çeşitli programlama dilleri kullanılacaktır.
• Programlama dillerinin ortak kavramlarını incelemek.
• Farklı paradigmaları, yaklaşımları incelemek.
• Programlama dilinin “daha iyi” olması ne demektir, ne programlama dilini daha nitelikli
yapar?
• Derleyici tasarımı, yazılım mühendisliği, nesneye yönelik tasarım, bilgisayar insan
etkileşimi gibi diğer konulara temel oluşturmak.
• Kısaca bu dersin amacı, öğrencinin hem programlama dillerinin temelindeki kavramları
öğrenmesini, hem de programlama dilleri alanında kapsamlı bir bakış açısına sahip
olmasını sağlamaktır.
3. Dersin amacı
Program geliştirme fikirleri ifade etme becerisini arttırma
Projeye uygun programlama dillerini seçmek
Yeni diller öğrenme becerisini attırma
Uygulamanın öneminin daha iyi anlaşılması
Zaten bilinen dillerin daha iyi kullanılması
Gelişime ayak uydurma
4. 4
Neden Programlama Dilleri Dersi?
• Fikirlerimizi uygularken daha kolay ve daha iyi yapabilmek kısaca etkin algoritmalar geliştirebilmek.
• Seçeneklerimizin ne olduğunu bilirsek iyiyi seçebiliriz. Programlama dilleri arasındaki seçimin
kolaylaştırılması için gereklidir.
• Dil öğrenmede yetkinlik. Dillerin özelliklerini bilmeyen, belli bir dille çalışmaya alışmış kişi, farklı bir
dili öğrenmesi gerektiğinde zorlanır.
• Belli bir dilin önemli özelliklerini anlayarak daha iyi kullanabilmek , var olan programlama dillerinin
kullanımının geliştirilmesi için
• Dilleri daha iyi değerlendirebilirsek, doğru seçimler yaparız, doğru teknolojilerin gelişmesine destek
olmuş oluruz.
• Hata ayıklarken özelliklerini bilmemiz faydalıdır.
• Programlama yapıları hakkındaki bilginimiz artar, özellikleri öğreniriz, olmayan özelliklerine
öykünürüz (emulate).
• Yeni bir dil öğrenilmesinin kolaylaştırılması
• Yeni bir dil tasarlamanın kolaylaştırılması
5. Genel Kavramlar
• DONANIM
Bilgisayarı oluşturan fiziksel parçaların tümüne donanım denir.
• YAZILIM
Kullanıcı ile donanım arasındaki iletişimi sağlayan programlama ve
programlamayla ilgili konuların geneline yazılım denir.
6. 6
Doğal Dil- Programlama Dili (1)
• Bir programlama dili birçok yönden doğal dillere benzer.
• Her programlama dilinin kendisine özgü kelimeleri (söz varlığı,
sözlüğü), işaretleri (yazım işaretleri) ve yazım kuralları bulunmaktadır.
• Programlama dillerinde, o dilin dilbilgisi kurallarına o dilin sözdizimi
(syntax) adı verilmektedir.
• Bir programcı, o anda kullandığı programlama dilinin sözdizim
kurallarına göre kelime ve işaretleri bir araya getirerek, bilgisayara bir
şeyleri yapmasını anlatan, bilgisayar açısından bir anlama sahip olan
bir deyim oluşturmaktadır.
7. 7
Doğal Dil- Programlama Dili (2)
• Doğal dillerde konuşma veya yazma sırasında hata yapılabilir.
• Programlama dillerinde hataya yer yoktur.
• Herhangi bir hata yapılması durumunda o deyimin bilgisayar açısından
hiçbir anlamı olmamakta, bilgisayar o deyimi anlamamaktadır.
• Bir program yazmak için programcının o dilin tüm sözdizim kurallarını
bilmesi gerekmektedir.
• Programcının programlama dilinin kurallarına uymaması durumunda
program hatalara sahip olacaktır.
• Bilgisayar hatalı programı anlamayacak, dolayısıyla çalıştırmayacaktır.
8. Genel Kavramlar
Yazılım uygulama alanlarına göre;
1. Scientific and Engineering Software
2. Business Software
3. Artificial Intelligence Software
4. Image Processing Software
5. System Software
9. 9
Programlama Dili Nedir?
• Her dilin, nesneleri, özellikleri, ilişkileri ve işlemleri göstermek için
çeşitli sembolleri ve bu sembolleri birleştirmek için kuralları vardır.
• Bir doğal dil, bir grup insan arasında ortak olarak anlaşılan sembolik
bir iletişim dili olarak tanımlanabilir ve iletişim insanlar arasında
gerçekleşir.
• Programlama dili ise, insanlar ve bilgisayarlar arasındaki iletişimi
sağlarlar.
• Bir programlama dili, bir problemin çözümünün bilgisayardaki
gerçekleştirimini ifade etmek amacıyla programlar oluşturulması için
kullanılan bir dildir.
10. 10
Programlama Dili Nedir?
• Programlama dili, bir problemin çözümünün
bilgisayardaki gerçekleştirimini ifade etmek amacıyla
tasarlanmış ve o programlama dili için hem insanlar
hem de bilgisayarlar tarafından ortak olarak
anlaşılacak kurallar ve semboller dizisidir.
Programlama Dili
10000010010110100100101……
Bu bir
program
11. 11
Programlama
int sum(int[] x) {
int sum = 0;
n = 0;
while (n < x.length) {
sum += x[n];
}
return sum;
}
00101010101010
10101011111010
11101010101110
00101010101010
...
12. 12
program gcd(input, output);
var i, j: integer;
begin
read(i, j);
while i <> j do
if i > j then i := i – j;
else j := j – i;
writeln(i)
end.
Bilgisayara neden ihtiyaç duyarız?
14. 14
Programlama Dili Nedir?
Makine Dili
• Bir programlama dilinin bilgisayar tarafından anlaşılması için, o dilin
sözdiziminin ve anlamının makine diline çevrilmesi gereklidir.
• Makine dili, bir bilgisayarın doğrudan anladığı gösterim olup,
bilgisayarların ana dili olarak nitelenebilir.
• Programlama dillerinin makine diline çevrilmesi, derleme veya
yorumlama yöntemleriyle sağlanır.
15. 15
Neden Farklı Programlama Dilleri? (1)
• Programlama dillerinin zaman içinde gelişimidir.
• Araştırmacıların programlama dillerinde daha iyi tasarımlar yapmaları
sonucunda gelişme olmaktadır.
• İlk programlama dilleri 1950’lerin başlarında geliştirilmiştir.
• Bugünkü programlama dilleri ile karşılaştırıldıklarında oldukça zayıf bir
dil tasarımına sahiplerdi.
• Modern programlama dilleri ilk programlama dillerinden çok farklı
özelliklere sahip olacak şekilde geliştirilmişlerdir.
16. 16
Neden Farklı Programlama Dilleri? (1)
• Değişik programlama gereksinimleri ortaya çıkmıştır.
• Gereksinimlere göre, birbirlerinden çok farklı özelliklere sahip olan çok sayıda
programlama dili geliştirilmiştir.
• Bilgisayarlarda kullanılan programlar genel olarak “sistem programları” ve
“uygulama programları” olmak üzere ikiye ayrılmaktadırlar.
• Bazı programlama dilleri sistem programları, bazıları ise uygulama programları
yazmak üzere tasarlanmışlardır.
• Farklı uygulama türleri bulunduğundan, bu uygulamalara cevap verebilecek
çeşitlilikte programlama dilleri de geliştirilmiştir.
• Bir iş için uygun olan programlama dili, diğer iş için uygun olmayabilmektedir.
Bilgisayarlar birbirinden farklı amaçlar için kullanıldığından, çok sayıda
programlama dili geliştirilmiştir.
17. Programlama Dillerinin Sınıflandırılması
1. Seviyelerine göre sınıflandırma
2. Uygulama alanlarına göre sınıflandırma
3. Dillerin tasarım paradigmalarına göre sınıflandırma
18. Uygulama Alanlarına Göre Sınıflandırma
1. Bilimsel ve mühendislik uygulama dilleri
Dizi ve matrislerin etkin kullanımı
• Fortran, C, Pascal
2. Mesleki uygulama dilleri
• Raporlar oluşturun
• COBOL
3. Yapay zeka uygulamaları dilleri
• Sayılar yerine semboller; bağlantılı listeleri(Linked List) kullanır
• LISP, Prolog, Python
4. Sistem programlama dilleri
• Sürekli kullanım nedeniyle verimliliğe ihtiyaç var
• C, Assembler
5. Veritabanı dilleri
• Çoklu verilerin yönetiminde etkinlik sağlarlar.
• MSSQL, Oracle Forms
19. Uygulama Alanlarına Göre Sınıflandırma
6. Genel Amaçlı programlama dilleri
• Bir çok kesimin kullanımına olanak sağlar.
• Java, C#, Basic, Pascal
7. Modelleme yapmak için geliştirilen diller
• Gerçek hayat problemlerinin tam olarak koda yansıtılmasını sağlarlar
• Simula67
20. Programlama Dillerinin Seviyelerine Göre
Sınıflandırılması
• Makine Dili: 1 ve 0
• Düşük Seviyeli: Assembly
• Orta Seviye: C, C++
• Yüksek Seviye: Pascal, Basic, Fortran, Cobol
• Çok Yüksek Seviye: Dbase, Visual Basic, Java, SQL, Paradox, Access, FileMaker,
C#
22. Programlama Dili Değerlendirme Kriterleri
• Okunabilirlik (Readability): programların okunma ve anlaşılma
kolaylığı
• Yazılabilirlik (Writability): bir dilin programları oluşturmak için
kullanılma kolaylığı
• Güvenilirlik (Reliability): spesifikasyonları yerine getirme
• Maliyet (Cost): nihai toplam maliyet
• Bir yazılım mühendisi dil değerlendirme ölçütlerini çok iyi bilmelidir.
24. Okunabilirlik (Readability)
• Bir programlama dilinin değerlendirilmesinde en önemli kriterlerden
birisi, programların okunabilme ve anlaşılabilme kolaylığıdır.
• Programlama dillerinin okunabilir olmaları, programlarda hata
olasılığını azaltır ve programların bakımını kolaylaştırır.
• Bir programlama dilinde yer alan kavramlar, yapılar ve dilin sözdizimi,
dilin okunabilirliğini doğrudan etkiler.
25. Okunabilirlik (Readability)
• Genel basitlik (Simplicity)
• Ortogonalite (Orthogonality)
• Veri tipleri (Data Types)
• Sözdizimi ile ilgili hususlar (Syntax Design)
26. Okunabilirlik (Readability)
• Çok sayıda basit yapıdan oluşan bir dilin okunabilirliği az sayıda olandan daha azdır.
• Yönetimi kolay kullanışlı nitelikler (features) ve yapılar (constructs) kümesi bulunması genel kolaylığı
arttırır.
• Özellik çokluğu (feature multiplicity) (aynı işi yapmanın birkaç tane yolu olması) istenmez
Örneğin JAVA’da bir değişkenin değerini 1(bir) artırmak istersek:
Count=Count+1
Count+=1
Count++
++Count
Minimum operatör aşırı yükleme (operator overloading)
27. Okunabilirlik (Readability)
Ortogonalite
• Ortogonalite, "A'yı değiştirmek B'yi değiştirmez"anlamına gelen
özelliktir.
• Bir programlama dilinde ortogonallik, nispeten küçük bir ilkel yapı
kümesinin, dilin kontrol ve veri yapılarını oluşturmak için nispeten az
sayıda yolla birleştirilebileceği anlamına gelir.
• opcode [ operand ] [ operand ] …
28. Okunabilirlik (Readability)
• Veri tipleri
• Yeterli önceden tanımlanmış veri türleri
• C’de Boolean veri tipi yoktur
• Java, C#, Python… gibi dillerde Boolean veri tipivardır.
• timeout = false
29. Okunabilirlik (Readability)
• Sözdizimi ile ilgili hususlar
• Özel Kelimeler
• Döngü için özel kelimeler: while, class, and for
• Birleşik özel kelimeler
• static kelimesi (compile time’da yüklenir)
• public static
30. Yazılabilirlik (Writability)
Basitlik ve Ortogonalite
• Az sayıda yapı, az sayıda ilkel, bunları birleştirmek için küçük bir kurallar dizisi
Soyutlama desteği
• Karmaşık yapıları veya işlemleri ayrıntıların göz ardı edilmesine izin verecek
şekilde tanımlama ve kullanma yeteneği (Kütüphaneler ve Framework'ler)
İfade
• İşlemleri belirlemenin nispeten uygun bir yolu
• Operatörlerin gücü ve sayısı ve önceden tanımlanmış işlevler (yapı kurmaktan
kurtarır)
31. Güvenilirlik (Reliability)
Tip kontrolü
• Derleme zamanında yapılmalıdır (Çalışmazamanında kötü sonuçlar
doğurabilir.)
• Tip hatalarını: int, float, string
int a = 10.2; ? (tip kontrolüne girer)
32. Güvenilirlik (Reliability)
İstisna işleme (Exception Handling)
• Çalışma zamanı hatalarını önleyin ve düzelticiönlemler alın.
• try-catch
• Ada, C++, Java, and C# bu konuya önem vermiştir.
33. Güvenilirlik (Reliability)
Takma ad (Aliasing)
• Aynı bellek konumu için iki veya daha fazla farklı referans alma
yönteminin varlığı
• Özellikle Nesne Yönelimli Programlama dillerinde yapılabilir.
34. Güvenilirlik (Reliability)
Okunabilirlik ve yazılabilirlik
• Bir program ne kadar kolay yazılırsa, doğru olma olasılığı da o kadar
yüksektir.
• Bir algoritmayı ifade etmenin 'doğal' yollarını desteklemeyen bir dil, 'doğal
olmayan' yaklaşımların kullanılmasına ve dolayısıyla daha düşük
güvenilirliğe yol açar. Bu durum, programcıların daha fazla hata yapmasına
ve kodun doğru çalışmama olasılığının artmasına neden olur. Örneğin,
daha eski ve karmaşık yapıya sahip dillerde (Assembly gibi), bir işlemi
gerçekleştirmek için çok fazla adım gerekebilir ve bu adımlar arasında
hataya açık pek çok yer olabilir. Ancak, daha modern dillerde (Python, Java
gibi), aynı işlem çok daha basit ve doğal bir şekilde ifade edilebilir
35. Cost (Maliyet)
• Programcıları dili kullanmak için eğitmek
• Program yazma (belirli uygulamalara yakınlık)
• Programları derleme: Zaman önemli
• Programları çalıştırma
• Ücretsiz derleyicilerin kullanılabilirliği
• Güvenilirlik: zayıf güvenilirlik yüksek maliyetlere yol açar
• Programların bakımı
36. Programlama Dili Değerlendirme Kriterleri
Diğerleri
• İfade gücü
• Veri Türleri ve Yapıları
• Giriş çıkış kolaylığı
• Taşınabilirlik
• Altprogramlama
• Verimlilik
• Esneklik
• Öğrenme kolaylığı
• Genellilik
38. Dil Tasarımında Karşılaştırmalar
• Güvenilirlik vs. yürütme maliyeti
Örnek: Java, dizi öğelerine yapılan tüm referansların düzgün indeksleme için
kontrol edilmesini ister, bu da yürütme maliyetlerinin artmasına neden olur
• Okunabilirlik vs. yazılabilirlik
Örnek: APL, karmaşık hesaplamaların kompakt bir programda ancak
okunabilirliğin düşük olması pahasına yazılmasına olanak tanıyan birçok
güçlü operatör (ve çok sayıda yeni sembol) sağlar
• Yazılabilirlik (esneklik) vs. güvenilirlik
Örnek: C ++ işaretçileri güçlü ve çok esnektir ancak güvenilmezdir
40. Programlama Dilinin Hedefleri
Bilgisayar Mimarisi Diller:
• Birçok modern programlama dili, Von Neumann mimarisine dayanır. Bu
mimari, bilgisayarın temel çalışma yapısını açıklar ve günümüzdeki çoğu
bilgisayar bu yapıyı kullanır. Von Neumann mimarisinde veri ve talimatlar
aynı hafızada saklanır, böylece merkezi bir işlem birimi (CPU) bu veriler
üzerinde işlemler yapar. Programlama dilleri, bu yapıyı en iyi şekilde
kullanacak şekilde tasarlanır. Bu yüzden dillerin çoğu, bu mimariye uygun
şekilde optimize edilmiştir.
Program Tasarım Metodolojileri
• Yeni yazılım geliştirme metodolojileri (ör. Nesne yönelimli yazılım
geliştirme) yeni programlama paradigmalarına ve dolayısıyla yeni
programlama dillerine yol açmıştır.
41. Programlama Paradigmaları
• Diller uygulama alanlarına, düzeylerine göre sınıflandırılacağı gibi dilin
tasarım metodolojisine göre de sınıflandırılabilir.
• Paradigma; bir grubun ortak kararlarını temsil edene ve grubun
konuya yeni bir şekilde bakışını sağlayan bir kavramsal şemadır.
Programlama paradigmaları 4 farklı grupta incelenebilir;
1. Emir Esaslı (Imperative) programlama
2. Nesneye Yönelik (Object Oriented) programlama
3. Fonksiyonel (Functional) programlama
4. Mantıksal (Logical) programlama
42. Programlama Paradigmaları
• Bir yazılım sisteminin geliştirilmesinde kullanılan tasarım yöntemi ve
programlama dili paradigması aynıysa, yazılım geliştirme süreci daha kolay
hale gelir. Ayrıca, paradigmalar arasında ortak kavramlar bulunduğu için bir
paradigmayı öğrenmek, aynı gruptaki diğer dilleri öğrenmeyi kolaylaştırır.
• Paylaşılan kavramlar nedeniyle, programlama paradigmalarına göre gruplanan
diller arasında yoğun benzerlik bulunmaktadır. Bu nedenle bir paradigma
grubunun bir üyesini öğrenmek, aynı gruptaki bir diğer dili öğrenmeyi
kolaylaştırır.
43. Programlama Paradigmaları
Paradigma-Yönelik Diller:
• Belirli bir paradigmayı destekleyen dillere paradigma-yönelik diller denir.
• Örneğin, Python ve Ruby gibi diller nesneye yönelik programlama paradigmasını
destekler. Benzer şekilde, C, Go, ve Rust, imperative (emir esaslı) paradigmayı destekler.
• Öte yandan, bazı diller birden fazla paradigmayı destekler.
• Örneğin, JavaScript ve Python hem imperative hem de fonksiyonel paradigmayı
destekler. Aynı şekilde, Kotlin ve Scala da hem imperative hem de nesneye yönelik
programların geliştirilmesini destekler.
• C++ hem imperative hem de nesneye yönelik programların geliştirilmesini destekler.
44. Programlama Paradigmaları
• Imperative (Zorunlu, komut merkezli, emirsel) Paradigmayı Destekleyen
Diller
• Imperative paradigma'daki programlama dilleri işlem tabanlı olup bir
program, bir dizi işlem olarak görülür. Komutlar ve prosedürler kullanarak
değişkenleri güncellemesi ile karakterize edilir.
• Programlardaki deyimler, birbirleri ile değişkenler aracılığı ile iletişim kurar.
Bu dillerde bir program, bir dizi deyimden oluşur ve her deyimin çalışması,
bellekteki bir veya daha fazla yerleşim değerinin değiştirilmesine neden olur.
• Örneğin, iki değişkenin toplanması ve üçüncü bir değişkenin elde edilmesi,
bu değerlerin birleştirilerek sonucun yeni bir yerleşimde saklanması olarak
gösterilebilir.
45. Programlama Paradigmaları
• Imperative (Zorunlu) Paradigmayı Destekleyen Diller
• Söz dizimi:
• Deyim 1;
‐
• Deyim 2;
• ……………
• ……………
• Deyim n;
‐
• Imperative diller, yaygın olarak kullanılan ilk dil grubudur.
Imperative programlama paradigması, C, FORTRAN, PL/I, Pascal,
COBOL, Ada gibi birçok dil tarafından desteklenmektedir.
46. C’de OBEB (Öklit) Algoritması
#include <stdio.h>
int gcd(int a, int b) {
while (a != b) {
if (a > b) a = a - b;
else b = b - a;
}
return a;
}
Programlama Paradigmaları
Algoritma, 2000 yıl önce Euclid tarafından
keşfedilmiştir
a ve b'nin OBEB'i, b ve a'nın b'ye
bölümünden kalan sayının OBEB'iyle
aynıdır
48. Programlama Paradigmaları
• Nesneye Yönelik Paradigmayı Destekleyen Diller
• Bu diller nesnelerin sınıflandırılması esasına dayanır.
• Birbirini etkileyen nesnelerden oluşmuş diller olarak tanımlanabilir.
Nesne, belli bir durumda paylaşılan işlemlerin bir topluluğudur.
Veriler, fonksiyon ve prosedürler tek bir nesnede tutulabilir. Nesne
temelli yaklaşımı kullanan dillere örnek olarak Simula, Smalltalk, C+
+, Java ve C# gibi diller verilebilir.
49. Programlama Paradigmaları
• Fonksiyonel Paradigmayı Destekleyen Diller
• Burada bilgisayara bir işlemi nasıl yapacağı bildirilir. Veriler
ve sonucu elde etmek için veriye uygulanacak fonksiyonel
dönüşümler, paradigmanın temelini oluşturur.
• Sadece fonksiyonlar üzerine kurulmuş bir modeldir.
Fonksiyonlar bir çok değer alır ve geriye sadece bir değer
döndürürler. Fonksiyonlar başka fonksiyonları çağırır ya da
başka fonksiyonun parametresi olur.
50. Programlama Paradigmaları
• Fonksiyonel Paradigmayı Destekleyen Diller
• Bu dillerde, alt yordamlar, fonksiyonlar (prosedürler)
kullanılarak program daha alt parçalara bölünür.
• İlk fonksiyonel dil Lisp’dir.
• ML ve HASKELL modern fonksiyonel dillerdir. Bu diller
fonksiyonlara rasgele değerler gibi davranmaktadır
• ML ile Lisp karışık programlama dilleridir. Değişken ve
atama işlemlerini desteklemektedir.
• Haskell ise tamamen saf fonksiyonel bir dildir. Değişken
ve atama işlemlerini desteklememektedir.
51. Programlama Paradigmaları
(define gcd2 ; 'gcd' is built-in to R5RS
(lambda (a b)
(cond ((= a b) a)
((> a b) (gcd2 (- a b) b))
(else (gcd2 (- b a) a)))))
Scheme’de OBEB (Öklit) Algoritması
52. Programlama Paradigmaları
• Mantık Paradigmayı Destekleyen Diller
• Mantık programlama paradigmasında programlama, bir işin nasıl
yapılacağının belirtilmesi yerine, ne yapılması istendiğinin belirtilmesi olarak
görülür.
• Bu diller, belirli bir koşulun varlığını kontrol ederek ve koşul sağlanıyorsa,
uygun bir işlem gerçekleştirerek çalışırlar.
• Bu modeldeki dillere en tanınmış örnek, Prolog programlama dilidir.
53. Programlama Paradigmaları
• Mantıksal diller kural tabanlı dillerdir. İmperative dillerde çözülecek
algoritmanın tanımı ayrıntılı yapılır, komutların ve işlemlerin sırası bellidir.
• Mantıksal programlamada ise ayrıntı da yoktur. Sıralama da belli değildir.
Programlama dili, sonucu elde etmek için hangi kuralı hangi sırayla
kullanacağını belirlemelidir.
• Bu yaklaşım diğer dil kategorilerine göre çok radikaldir. Hiçbir kategoriye
girmediği ve kendi başına ayrı bir kategori olduğu açıktır. En yaygın mantıksal
dil Prolog’dur
54. Programlama Paradigmaları
• Mantık Paradigmayı Destekleyen Diller
• Mantık tabanlı bir dilin çalışması imperative bir dilin çalışmasına benzemekle
birlikte, deyimler sıralı olarak işlenmez.
• Bu dillerin sözdizimi genel olarak şu şekildedir:
55. Programlama Paradigmaları
• Mantık Paradigmayı Destekleyen Diller
• Doğal dil işleme, mantık programlamanın yaygın olarak kullanıldığı bir alandır.
• Prolog dili, aşağıdaki örnekte olduğu gibi insan-makine etkileşimlerine
uygundur. Prolog, özel bir mantık yürütme şeklini kullanarak kendisine
yöneltilen sorgulara yanıt verir.
• Gerçekler-Kurallar
• 1-Ali insandır. 2-İnsanlar ölümlüdür. (Bilgisayar öğrenir)
• Hedef
• Ali ölümlüdür? (Bilgisayar gerçeklere bakarak cevap bulur)
• Sonuc:
• Ali ölümlüdür.
56. Programlama Paradigmaları
gcd(A,B,G) :- A = B, G = A.
gcd(A,B,G) :- A > B, C is A-B, gcd(C,B,G).
gcd(A,B,G) :- B > A, C is B-A, gcd(C,A,G).
Prolog’da OBEB (Öklit) Algoritması