torsdag 23 april 2009

Logikprogrammering

Ha ha efter en kort paus i pluggandet har jag satt mig ner för att under en kort stund förstå vad prolog är. Vilket tydligen ska vara ett språk för logikprogramering, vilket ska användas inom artificiell intelligens och språkbehandling.
Om du vill testa hemma själv måste du installera prolog med sudo apt-get install gprolog.

Till att börja med lite tester! Skapa typ filen 'test.pl':

gillar(eva, mat).
gillar(eva, vin).
gillar(adam, vin).
Här är det bara att definiera att eva gillar mat och vin. Adam gillar bara vin. Nu startar prolog.

$ prolog
[test].
| ?- gillar(adam, vin).
true

| ?- gillar(adam, bananer).
no
Det står alltså att Adam inte är så förtjust i bananer medan han däremot gärna tar ett glas vin eller två.

% ananas och apelsin är frukt
frukt(ananas).
frukt(apelsin).

(Prologen hjälper till att tänka typ)

% saker eva gillar
gillar(eva, mat).
gillar(eva, vin).
% eva gillar saker som är frukt
gillar(eva, X):-frukt(X).

X är det vi inte vet.

% eva gillar alla som gillar vin
gillar(eva, P):-gillar(P, vin).

% saker ernie gillar
gillar(ernie, vin).

% saker adam gillar
gillar(adam, vin).
gillar(adam, eva).

% adam gillar allt eva gillar
gillar(adam, X):-gillar(eva, X).
Enligt ovanstående logik borde adam gilla ernie (eftersom adam gillar allt som eva gillar OCH eva gillar alla som gillar vin OCH ernie gillar vin).
Jag frågar prolog om detta...

| ?- gillar(adam, ernie).
yes
Med kommandot 'trace.' kan jag följa hur prolog gör sin slutledning. Vilken är riktigt nice att titta på!

| ?- trace.
The debugger will first creep -- showing everything (trace)

yes
{trace}
| ?- gillar(adam, ernie).
1 1 Call: gillar(adam,ernie) ? (vet inte)
2 2 Call: gillar(eva,ernie) ? (vet inte)
3 3 Call: frukt(ernie) ? (är ernie en frukt?)
3 3 Fail: frukt(ernie) ? (nej!)
3 3 Call: gillar(ernie,vin) ?
3 3 Exit: gillar(ernie,vin) ? (ja! ernie gillar vin)
2 2 Exit: gillar(eva,ernie) ? (eva gillar ernie)
1 1 Exit: gillar(adam,ernie) ? (adam gillar ernie)

yes!

klart slut!
Hoppas du fatta något.
Damp! Det är lite krångligt att fatta om ni inte har programmet. Tar lite tid att lära sig kommandona också men sen rullar det bara på. Tog detta som ett classiskt exempel som jag hitta på nätet nånstans. Himlaskoj är det i varje fall att leka med!

Nu ska jag iväg och träffa Mikaela och typ fika sen eller något. Sen måste jag göra klart lite saker till ikväll.
krams!
-sen lite dampigt att en person är sur på mig (jag har tydligen förstört hennes vecka) då japan expot är inställt. HUR FAN KAN DET VARA MITT FEL?!?!? DAMP!

Inga kommentarer: