| torsdag 31. desember 2009 18:10 | |
Prolog IntroduksjonLitt 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 atguess(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>
|
|
| Sist oppdatert søndag 18. juli 2010 22:56 |