Prolog Introduksjon

Prolog Introduksjon

Thu 31 December 2009

Litt om det logiske språket Prolog.



Termar:

- Fakta, reglar og spørsmål er spesifisert vha termar
- En enkel term er eit nummer, en variabel som startar med liten bokstav, eller et atom
- En sammensatt term består et atom etterfulgt av en sekvens av subterma i parantes

Basis syntaks for fakta, reglar og spørsmål i Edinburgh Prolog:

<p>
<fact> ::= <term>
<rule> ::= <term> :- <terms>
<query> ::= <terms>
<term> ::= <number> | <atom> | <variable> | <atom> ( <terms> )
<terms> ::= <term> | <term> , <terms>
</p>

Bruk av Prolog:

- Prolog har ein database der den lagrar reglar
- Nøkkelordet consult brukast for å lese inn ei fil som inneholder fakta og reglar. Inneholdet vert lagt til i databasen.
- Nøkkelordet reconsult overkjøyrer reglane som allereide ligg i databasen

Eksistensielle spørsmål:

- Svaret på eit spørsmål vil vere ei løysing
- Queries vert også kalla goals
- Ein vil ofte referere til dei individuelle termane i eit spørsmål som “subgoals”.
- Det er ikkje nokon formell forskjell mellom goal og subgoal
- Det er ikkje nokon formell forskjell mellom term og subterm
- En variabel i eit spørsmål refererar til eksistensen av ei passande objekt
- Ei løysing på eit spørsmål er ei binding av variablane til dei verdiane som gjer at spørsmålet vert sant
- Dersom det finnest fleire rette svar på eit spørsmål får vi to valg der det eine er å trykke enter. Prolog vil då svare med at det kanskje finnest fleire løysingar og så vente p nye spørsmål. Eller vi kan skrive semikolon ; og så trykke enter som fører til at Prolog vil gi oss neste rette svar på spørsmålet, evt skrive ut at det ikkje er fleire rette svar igjen.
- Variablar kan forekomme kor som helst i eit spørsmål

Universielle fakta og reglar:

- Reglar er Horn klausular
- Termen til venstre for :- er head og termane til høgre for :- er tilstandar / conditions

Negasjon som feil:

- Et nei i Prolog betyr at Prolog ikkje er istand til å bevise det. Dvs om Prolog ikkje greier å tilfredstille krava i spørsmålet. Så dersom ikkje Prolog greier å bevise det må det vere feil / usannt
- not operatoren representerar på samme måte at Prolog ikkje greier å bevise det. Så et spørsmål not (p) vert evaluert til sant dersom Prolog ikkje greier å bevise P
- Som en tommelfinger regel kan ein bruke not operatoren til å teste kjente verdiar eller variablar som er kjente før not vert brukt
- Rekkefølgen til subgoal'a påvirkar svaret

Universialisering:

- Deduksjon i Prolog er basert på universialisering. Termane T1 og T2 universialiserar dersom dei har en felles instans U.
- Om en variabel forekjem i både T1 og T2 må vi substituere samme subtermen for alle forekomsta av variabelen både i T1 og T2

Aritmetikk:

- = operatoren står for universialisering i Prolog
- Infix operatoren is evaluerar et uttrykk

Datastrukturen liste i Prolog:

- Den tomme lista vert skrive []
- Vi kan spesifisere en initial sekvens av element og ei trailing liste skilt frå kvarandre med |
- Head etterfulgt av tail vert skrive slik [H | T]. Head er første elementet i lista og tail er lista som består av dei resterande elementa

Termar som datastrukturar:

- [H | T] er det samme som .(H, T) der dot operatoren er det samme som cons i Lisp. Termen for lista [a, b, c] vert t.d slik .(a, .(b, (.c, [])))
- Det er en one-to-one korrespondanse mellom tre og termar. Så alle tre kan skrivast som en term og alle termar kan tegnast som eit tre
- Alle datastrukturar som kan simulerast ved bruk av tre kan også simulerast vha termar
- Termar kan også representere grafar med syklus

Guess and verify, en programmeringsteknikk:

- Har forma "Er der en S slik at
guess(S) og verify(s)
Der guess(S) og verify(s) er subgoal/undermål
- Vert og kalla generate and test
- Kan uttrkkast på forma "Konklusjon sann if guess(S) og verify(S)
- Sidan beregningar i Prolog går frå venstre mot høgre vil rekkefølgen på subgoala kunne påvirke effektiviteten
det subgoalet med færrast løysingar bør vere guess(S)
</pre>

Tagged as : prolog assembler