Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Програмски језици

Према начину решавања проблема програмски језици се деле на

 Процедуралне
 Декларативне (непроцедуралне)

Процедурални језици – рачунару кажемо како ће проблем да реши, тј. дајемо му низ инструкција
које ће да доведу до решења проблема. Чисто процедурални су старији програмски језици C,
Pascal, Fortran…

Декларативни језици имају сасвим други приступ; они описују проблем, а сам рачунар
(програмски преводилац) ће да дође до решења. Такви су језици PROLOG, LISP, Haskell… Ни ова
класа језика није млада. Још 60-их година двадесетог века су се појавили декларативни
програмски језици. PROLOG и LISP су стари програмски језици, док је Haskell новији. Декларативни
програмски језици су мало заступљени у свету програмирања, а користе се за вештачку
интелигенцију, експертске системе и сл.

Програм је заправо композиција једноставних функција. Многа израчунавања извршавају се


рекурзијом. Једном додељен тип променљивој не може да се мења у току програма.
Предмет који ћемо изучавати назива се програмске парадигме. Реч парадигма грчког је порекла и
значи узор, правило.

На основу процеса израчунавања приликом решавања проблема можемо говорити о три


парадигме (узора, правила, приступа):

 Императивна парадигма (наредбе, итерације...)


 Функционална парадигма (све се описује функцијама, нпр. програмски језици Haskell, LISP)
 Логичка парадигма (користи логичке методе PROLOG)

Свака од ових парадигми има свој теоријски модел.

Императивна парадигма је заснована на Тјуринговој машини.

Функционална парадигма је заснована на 𝜆 рачуну.

Логичка парадигма је заснована на предикатском рачуну првог реда (математичка логика).

Императивна парадигма је ученицима добро позната јер се она користила у предмету


програмирање у прва три разреда. У предмету програмске парадигме бавићемо се логичком
парадигмом (програмски језик PROLOG) и функционалном парадигмом (програмски језик Haskell).
Програмски језици PROLOG и Haskell спадају у декларативне језике и имају другачији приступ у
односу на оно на шта су ученици навикли. Ови језици се називају и дескриптивни програмски
језици јер описују проблем (дескрипција=опис).

Код функционалне парадигме програм је заправо композиција једноставних функција. Итерације,


циклуси не постоје, већ се извршавају рекурзијом. Једном додељен тип променљивој не може да
се мења у току програма.

Логичка парадигма
Најзаступљенији програмски језик који користи ову парадигму је PROLOG. У процесу решавања
проблема PROLOG користи методу резолуције.

 1965. створен је језик логичке парадигме ABSYS (Aberdin System) – Абердин је град у
Шкотској
 1971. У МАрсеју је створен Q-System који је п1972. Преименован у PROLOG (PROgramming
in LOGic)
 1995. Направљен је ISO PROLOG стандард
 Направљено је више имплементација PROLOG-a: BProlog, GNU Prolog, JIProlog, Visual Prolog, SWI
Prolog...
Ми ћемо корисити SWI Prolog.

Логичко програмирање се користи за:

 Решавање проблема математичке логике


 Обраду природних језика
 Подршку релационим базама података
 Симболичко решавање једначина
 Разне врсте вештачке интелигенције

Логичко програмирање није погодно за:

 I/O алгоритме
 Графику
 Нумеричка израчунавања

У следећем једноставном примеру може се видети како изгледа програмирање у PROLOG-у.

Рецимо, хоћемо да кажемо да је Марко Јанку и Петру. Направићемо релацију otac(X,Y) где је Х
отац, a Y син.

Формулисаћемо релацију braca(X,Y), где су X и Y браћа ако имају заједничког оца (променљива Z).

Цео код би изгледао овако:

otac(marko,janko).

otac(marko,petar).

braca(X,Y):-otac(Z,X),otac(Z,Y).

И сада би могло да се пита да ли су Јанко и Петар браћа.

?-braca(petar,janko)

Одговор би био ДА (тачно).


Функционална парадигма
Програм је заправо композиција једноставних функција. Многа израчунавања извршавају се
рекурзијом. Једном додељен тип променљивој не може да се мења у току програма.

Следећи пример показује како се креира функција add која сабира два броја:

add :: Integer -> Integer -> Integer --function declaration


add x y = x + y --function definition

main = do
putStrLn "The addition of the two numbers is:"
print(add 2 5) --calling a function

Следећи пример показује како се креира рекурзивна функција за рачунање факторијела:

fact :: Int -> Int


fact 0 = 1
fact n = n * fact ( n - 1 )

main = do
putStrLn "The factorial of 5 is:"
print (fact 5)

И main је функција која у свом телу позива већ направљену функцију fact.

You might also like