Szerbusztok :) már régen nem írtam, úgyhogy gondoltam, hogy valami új kategóriával állok elő. Egyetemi tanulmányaim során, ebben a félévben sikerült megismerkednem ezzel a csodálatos nyelvvel a Deklarativ Programozás c. tárgy keretein belül. A prolog a Programozás Logikában-nak a rövidítése. Alapvetően kétféle programozási nyelvfajta van, az egyik a felszólító módú a másik pedig a kijelentő módú, nyílván még sokféleképpen el lehet különíteni ezeket. A kijelentő fajtához tartozik ez a nyelv az SML-lel együtt, amit majd később fogok bemutatni. Meglátásom szerint körülbelül ugyanolyan nyelv, mint a többi, csak a jelölés és kifejezésrendszere másabb a megszokotthoz képest.

Hirtelenben lássunk is egy gyors példát, hogy is néz ki ez a cucc, például egy egyszerű összeadó funkciót prologban és cpp-ben:

% osszead(+A,+B,-E) A és B-t összeadja, az eredményt az E változóban kapjuk vissza
osszead(A,B,E):- E is A+B.
% Használat:
osszead(5,2,X).
% Lefuttatva:
X=7 ?
% Ekkor kérhetünk más eredményt is X-re, ekkor megpróbál visszakeresni
% olyan helyeket a függvényben, ahol máshogy is alakulhat az eredmény
% ha van ilyen kiírja, ha nincs, akkor 'no'-t ír ki
% Jelen esetben nem kapunk más eredményt, tehát:
no
#include <iostream>
// int osszead(int a,int b) a és b-t összeadja, az eredményt visszatérési értékként adja vissza
int osszead(int a, int b) { return a+b; }
void main() {
	int a = 5;
	int b = 2;
	int c = 0;
	c = osszead(a,b);
	cout << c;
}

A kódból azt hiszem jól látszanak a különbségek. A legszembetűnőbb, hogy prologban nincs visszatérési érték, csakis a paramétereken keresztül lehet értékeket beadni, illetve visszakapni. A commentek %-kal kezdődnek, mint látható. Az összeadás sem a szokványos módon működik, ha azt akarjuk hogy a változók a jobboldalon található értéket kapják meg, akkor az 'is'-t kell használnunk, az '=' prologban mintaillesztést jelent, ami elég furcsa elsőre, énis csak néztem. Például ha ezt vesszük: 7=5+2, ez hamis értéket ad vissza, hiszen nem egyezik meg a két oldal, az értékük igen, de ránézésre is látszik, hogy a 7=7, az 5+2=5+2 :) Ha a két oldal értékét kívánnánk hasonlítani, akkor ezeket először egy változóban kéne eltárolni, a 7-et nem kifejezetten, mivel az már egy érték, tehát valami ilyesmit lehetne rá írni:

ellenoriz(A,B):- A is 7, B is 5+2, A=B.
% Használat:
ellenoriz(A,B).
% Lefuttatva:
A=7 ,
B=7 ?
% Ha megkaptuk ezt az eredményt, akkor ez bizonyítja, hogy az A=B igaz volt.

Egy új elem látható a programban, ezt gyorsan el is mondanám: a ',' azaz vesszőről van szó, ami ez esetben az és-t jelenti, mint c/c++/c#/java stb.-ben az ∧-jel. Most nem próbáltam ki, de ha a függvény futtatásánál két értéket adnánk nem A,B-t, akkor csak egy 'yes' vagy 'no'-t kapnánk, természetesen ebben az esetben 'yes'-t, de erre nem esküdnék meg, csak a logikája miatt gondolom hogy így történne :)

A legfontosabbat persze a végére hagytam, hogy hogy is lehetne ezeket kipróbálgatni, tehát hogy működik a futtatás. Van hozzá egy saját külön program, több is létezik, az első fordítót hazánkban a tanárunk írta :) azóta már sokféle készült és vannak amik már jól beváltak, a legismertebb talán a Sicstus Prolog, mivel mi kapunk hozzá mindenféle license-t meg kódot így nekem nem gond feltelepíteni, nektek lehet gondotok lehet vele, de mint említettem vannak más fordítók is. Ezekben kétféle képpen lehet programozni, az egyik, hogy user módban megírogatjuk a függvényeket, aztán lefordítjuk, vagy egy szöveges fájlt fordítunk be, és akkor máris fordíthatjuk ahogy csak jól esik. Akit érdekel a téma mélyebben is, annak kezdetnek tudom ajánlani a tanszéki oldalt: DP site, itt találtok rengeteg irományt erről, szóval az órai anyagokat legalábbis biztosan pdf formában, abból hamar meg lehet tanulni, csak mivel kicsit hosszabb így elég sok időt elvesz, bár sok a felesleges anyag is, ezért is kezdtem el ezt írni :) Egyelőre ennyit bevezető révén. Aki kedvet kap írhat nekem :)