ANSWER SET PROGRAMMİNG
Programlama paradigmaları hakkında konuşmadan önce 3 sene önce sizlere fonksiyonel programlama hakkında ufak bir blog yazmıştım.
https://blog.ictr.club/lambda-calculus/
Şimdi ise sizlerle beraber declarative ve asp(answer set programming) hakkında konuşacağız.
Literatürde belki 26 dan farklı programlama paradigması ve alt paradigmaları mevcut bunların hepsini layıkı ile bilmeye şansımız çok az.Zaten en çok imperative(object oriented vb) ,declarative( fonksiyonel programlama vb) bu 2 ve alt paradigmaları kullanılmaktadır.Sorunlarınıza bağlı olarak günün sonunda yeni paradigmalar öğreniyorsunuz.
İMPERATİVE VE DECLARATİVE PROGRAMLAMA
İlk olarak 2 programlama paradigmasını sizlere tanıtıp örneklendirmeliyim.
Imperative programlama: bir bilgisayar programının nasıl çalıştığını adım adım belirttiğimiz yukardan aşağı programladığımız,satır satır kod yazdığımız en temel programlama paradigmasıdır.
Declarative programlama:bir bilgisayar programının nasıl çalıştığını adım adım belirtmek yerine, bir hedefin veya sonucun ne olduğunu tanımlayan bir programlama paradigmasıdır.
Bir örnek ile açıklayalım.Bir dizi oluşturalım ve bunları toplayacak basit bir program yazalım.
Imperative programlama örneği
1 2 3 4 5 6 7 8 |
let array = [1, 2, 3, 4, 5]; let total = 0; for (let i = 0; i < array.length; i++) { total = total + array[i]; } console.log(total); |
yukarıda görüldüğü gibi her bir dizi elemanını total adındaki değişken ile sıra ile topluyoruz
Declative programlama örneği
1 2 3 4 5 |
let array = [1, 2, 3, 4, 5]; let total = array.reduce((acc, current) => acc + current, 0); console.log(total); |
Declarative programlamada ise sadece reduce fonksiyonunu kullanarak günün sonunda döngüydü değişkendi uğraşmadan dizilerimizdeki sayıları topladık.
LOGİC PROGRAMLAMA
Logic programlama ise declarative bir programlamanın bir alt paradigmasıdır burada ise semanti kmodeller ,kurallar ve sorgular ile çalışıyoruz.Aşağıya doğru gittikçe detaylı şekilde sizlere izah edeceğim.
ASP (Answer set programming)
Neyin ne olduğunu nereden türediğini sizlere açıkladıktan sonra kuru fasülyenin faydalarına geçebiliriz.İlk olarak sizlere sembolik mantığı anlatmam gerekli fakat bu konuyu araştıran birisi zaten mantıksal önermeleri ve kümeleri bildiği için atlıyorum.
NE TİP SORUNLARDA ÇALIŞIR
Optimizasyon ,çıkarsama planlama ve sıralama sorunlarında kullanılabilir.Belli tiplerdeki problemler için fayda sağlar.Örneğin bir gegin satıcı probleminde veya bir yargı (suçlu-suçsuz şeklinde bir karar mekanizması için) sorunu için kullanılabilir .Aşağıdaki örnekler size bir fikir sağlayacaktır.
https://potassco.org/clingo/run/
ASP WORKFLOW
Bu tip programlarda
1.problem belirlenir .
2.mantık şemaları oluşturulur
3.bu şemalar üzerinden model oluşturulup sorunumuzun çözümü hazırlanır.
ALGORİTMASI/ÇALIŞMA BİÇİMİ
Kurallarımız (head(X) :- body(X).) şeklinde çalışır yada fonksiyon(X) :- obje (X). şeklinde düşünebiliriz.
% işareti ile yorum satırı yazabiliyoruz.
LOGİC PROGRAMLAMA Örneği
Yukarıdaki örneğimizi logic programlama ile programlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
% main kuralını sisteme yükledik :- initialization(main). % Toplam kuralı içerisinde Boş bir dizi ve bir değişken tanımladık. sum([], 0). % Dizi elemanlarını topla sum([Head | Tail], Total) :- sum(Tail, Subtotal), Total is Head + Subtotal. % X = 15 bu main kuralı içerisinde dizimizi tanımlayıp sonucu yazdırdık main :- sum([1, 2, 3, 4, 5], X), write(X). |
gördüğünüz gibi aynı örneği prolog ile hazırladık.Aşağıdaki link üzerinden çalıştırabilirsiniz
https://onecompiler.com/prolog/3ztsxcspc
Giriş seviyesinde bir yazı oldu eğer devamını isterseniz yorumlarda belirtmeniz yeterli olacaktır.Herkese iyi çalışmalar
Kaynakça
- https://github.com/topics/answer-set-programming
- https://www.youtube.com/watch?v=PXk3xYbmy_s
- https://towardsdatascience.com/knowledge-representation-and-reasoning-with-answer-set-programming-376e3113a421
- https://www.benjaminjohnston.com.au/pythonasp
- https://www.youtube.com/watch?v=V-y17OOEhpQ&list=PL7DBaibuDD9PeXzX7mExyVADcMU9b8eJ1&index=5
- https://mehmetkose.com.tr/blog/declarative-imperative-farki/
- https://bilgisayarkavramlari.com/2009/11/16/emirli-programlama-imperative-programming/
- https://www.educative.io/blog/declarative-vs-imperative-programming
- https://potassco.org/doc/start/
- https://wp.doc.ic.ac.uk/arusso/wp-content/uploads/sites/47/2015/01/clingo_guide.pdf