Logikprogrammering. Undervisningsmaterialet NYTT för 2013: Learn Prolog Now! SWI Prolog-tolk, startas under tuxedo/ pingvinerna med swipl!

Relevanta dokument
Föreläsning 3: rekursion

Traditionell Programmering

Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

Logik och kontrollstrukturer

Ett Logikprogram. Logik och Programmering. Introduktion till PROLOG, dvs. PROgramming in LOGic. Viktiga begrepp/områden i Prolog. Framtiden?

FL 5: Aritmetik. Teori

FL 6: Definite Clause Grammars (kap. 7)

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

DD1361 Programmeringsparadigm HT17

Prova på-laboration i Prolog

DD1361 Programmeringsparadigm HT16

Föreläsning 9 i programmeringsparadigm. Unifiering (Brna Chapter 4.1).

Semantik och pragmatik (Serie 4)

DD1361 Programmeringsparadigm HT15

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

DD1350 Logik för dataloger. Fö 2 Satslogik och Naturlig deduktion

Klassdeklaration. Metoddeklaration. Parameteröverföring

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Sanningsvärdet av ett sammansatt påstående (sats, utsaga) beror av bindeord och sanningsvärden för ingående påståenden.

Föreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.

Övningshäfte 1: Logik och matematikens språk

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Grundläggande logik och modellteori

Parameteröverföring. Exempel. Exempel. Metodkropp

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Programmering A. Johan Eliasson

Logisk semantik I. 1 Lite om satslogik. 1.1 Konjunktioner i grammatisk bemärkelse. 1.2 Sant och falskt. 1.3 Satssymboler. 1.

Innehåll. Föreläsning 7. Satslogiken är för grov. Samma sak i predikatlogik: Första ordningens predikatlogik. Logik med tillämpningar

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Språket Python - Del 1 Grundkurs i programmering med Python

Tommy Färnqvist, IDA, Linköpings universitet. 1 Kursadministration 1. 2 Introduktion Varför logik? Satslogik... 2

TDIU01 - Programmering i C++, grundkurs

Semantik och pragmatik

Varför är logik viktig för datavetare?

Vad är det? Översikt. Innehåll. Vi behöver modeller!!! Kontinuerlig/diskret. Varför modeller??? Exempel. Statiska system

Semantik och pragmatik (Serie 3)

Tentamen Grundläggande programmering

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Grundläggande datalogi - Övning 1

Användarhandledning Version 1.2

Datorlingvistisk grammatik I Institutionen för lingvistik och filologi Oktober 2007 Mats Dahllöf

FUZZY LOGIC. Christopher Palm chrpa087

Formell logik Kapitel 9. Robin Stenwall Lunds universitet

FÖRELÄSNING 3 ANDERS MÄRAK LEFFLER IDA/HCS

Semantik och pragmatik

Objektorienterad Programmering (TDDC77)

Extramaterial till Matematik Y

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Introduktion till användning av linux-servern sledge och några övningsuppgifter

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Grundläggande logik och modellteori

Deklarativ programmering

p /\ q r DD1350 Logik för dataloger Kort repetition Fö 3 Satslogikens semantik

MATEMATIKENS SPRÅK. Avsnitt 1

Föreläsning 3. Programmering, C och programmeringsmiljö

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Grundläggande logik och modellteori

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska ni kunna?

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Hornklausuler i satslogiken

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduk+on +ll programmering i JavaScript

JavaScript del 3 If, Operatorer och Confirm

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska kunnas?

Introduktion till programmering och Python Grundkurs i programmering med Python

Programmeringsteknik med C och Matlab

Programmering B med Visual C

Formell logik Kapitel 10. Robin Stenwall Lunds universitet

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Digitalt lärande och programmering i klassrummet. Introduktionsworkshop - Interaktiva berättelser med Twine

TUTORIAL: KLASSER & OBJEKT

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Sats. Om t är en rätvinklig triangel så är summan av kvadraterna på kateterna i t lika med kvadraten på hypotenusan.

En introduktion till logik

Formell logik Kapitel 5 och 6. Robin Stenwall Lunds universitet

Logik: sanning, konsekvens, bevis

Länkning av Prolog under C

Föreläsning 3: Booleans, if, switch

Uttryck och villkor. Föreläsning 2

729G09 Språkvetenskaplig databehandling

PROV. 12 Egenskaper (provavsnitt)

<script src= "

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

10. Moralisk fiktionalism och ickedeskriptiv

Föreläsning 2. Teori. Övningar. Unifiering Unifiering i Prolog Sökning efter bevis. Ett lite större exempel: kampsport.pl Praktisk träning (hemläxa)

Objektorienterad programmering Föreläsning 4

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Beräkningsvetenskap föreläsning 2

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

7, Diskreta strukturer

Transkript:

Logikprogrammering Undervisningsmaterialet NYTT för 2013: Learn Prolog Now! SWI Prolog-tolk, startas under tuxedo/ pingvinerna med swipl!

Learn Prolog Now!

SWI Prolog Gratis Prolog-tolk Lesser GNU Public License Fungerar på Linux, Windows Mac OS Det finns många olika Prolog-tolkar Alla följer inte ISO-standarden

Föreläsning 1 Teori Introduktion till Prolog Fakta, regler och förfrågningar. Prologs syntax Exercises ( hemläxa ) Praktisk träning

FL 1: innehåll Ge några enkla exempel på Prologprogram Presentera Prologs tre grundstrukturer: Fakta (Facts) Regler (Rules) Förfrågningar (Queries) Introducera andra begrepp, bl a logikens roll unifiering mha variabler Börja studera Prolog systematiskt genom att definiera termer, atomer och variabler.

Prolog "Programming with Logic" Deklarativt Mycket olikt andra (procedurala) programmeringsspråk Bra för kunskapsintensiva uppgifter

Prologs historia första Prolog-tolken av Colmerauer och Roussel 1972 1977 1980 1980s/1990s 2005

Prologs historia implementation av en DEC10-kompilator av Warren 1972 1977 1980 1980s/1990s 2005

Prologs historia Definite Clause Grammars implementation av Pereira och Warren 1972 1977 1980 1980s/1990s 2005

Prologs historia Prolog blir mera populärt, speciellt i Europa och Japan 1972 1977 1980 1980s/1990s 2005

Prologs historia Prolog används för att programmera naturligt språk-gränssnitt i International Space Station av NASA 1972 1977 1980 1980s/1990s 2005

Prologs grundidé Beskriv den relevanta situationen Ställ en fråga Prolog härleder logiskt nya fakta gällande den situation vi beskrivit Prolog delger oss sina slutsatser som svar

Konsekvenser Tänk deklarativt, inte proceduralt Utmanande Requires a different mindset Högnivåspråk Inte så effektivt som ex. C Bra när det gäller att producera snabba prototyper Nyttigt i många AI-applikationer

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party. Ska skrivas in i en separat fil, som laddas med ex.?- [prolog/lesson1]. filen i exemplet skulle heta prolog/lesson1.pl ej med

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?-

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- woman(mia).

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- woman(mia). yes?-

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- woman(mia). yes?- playsairguitar(jody).

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- woman(mia). yes?- playsairguitar(jody). yes?-

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- woman(mia). yes?- playsairguitar(jody). yes?- playsairguitar(mia). no

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- tattoed(jody).

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- tattoed(jody). no?-

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- tattoed(jody). ERROR: predicate tattoed/1 not defined.?-

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- party.

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- party. yes?-

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- rockconcert.

Kunskapsbas 1 woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). party.?- rockconcert. no?-

Kunskapsbas 2 happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda).

Kunskapsbas 2 happy(yolanda). listens2music(mia). fact listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda).

Kunskapsbas 2 happy(yolanda). listens2music(mia). fact fact listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda).

Kunskapsbas 2 happy(yolanda). listens2music(mia). fact fact listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda). rule

Kunskapsbas 2 happy(yolanda). listens2music(mia). fact fact listens2music(yolanda):- happy(yolanda). rule rule playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda).

Kunskapsbas 2 happy(yolanda). listens2music(mia). fact fact listens2music(yolanda):- happy(yolanda). rule rule playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda). rule

Kunskapsbas 2 happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda). head body

Kunskapsbas 2 happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda).?-

Kunskapsbas 2 happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda).?- playsairguitar(mia). yes?-

Kunskapsbas 2 happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda).?- playsairguitar(mia). yes?- playsairguitar(yolanda). yes

Satser (clauses) happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda). Det finns fem satser i den här kunskapsbasen: två fakta och tre regler. Slutet på en sats markeras med en punkt.

Predikat happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda). Det finns tre predikat i den här kunskapsbasen: happy, listens2music, och playsairguitar

Kunskapsbas 3 happy(vincent). listens2music(butch). playsairguitar(vincent):- listens2music(vincent), happy(vincent). playsairguitar(butch):- happy(butch). playsairguitar(butch):- listens2music(butch).

Att uttrycka konjunktion happy(vincent). listens2music(butch). playsairguitar(vincent):- listens2music(vincent), happy(vincent). playsairguitar(butch):- happy(butch). playsairguitar(butch):- listens2music(butch). Kommat, uttrycker konjunktion (and/och) i Prolog

Kunskapsbas 3 happy(vincent). listens2music(butch). playsairguitar(vincent):- listens2music(vincent), happy(vincent). playsairguitar(butch):- happy(butch). playsairguitar(butch):- listens2music(butch).?- playsairguitar(vincent). no?-

Kunskapsbas 3 happy(vincent). listens2music(butch). playsairguitar(vincent):- listens2music(vincent), happy(vincent). playsairguitar(butch):- happy(butch). playsairguitar(butch):- listens2music(butch).?- playsairguitar(butch). yes?-

Att uttrycka disjunktion (eller/or) happy(vincent). listens2music(butch). playsairguitar(vincent):- listens2music(vincent), happy(vincent). playsairguitar(butch):- happy(butch). playsairguitar(butch):- listens2music(butch). happy(vincent). listens2music(butch). gärna playsairguitar(vincent):- listens2music(vincent), happy(vincent). playsairguitar(butch):- happy(butch); listens2music(butch).

Prolog och Logik Prolog har klart något med logik att göra... Operatorer Implikation :- (P -> Q: Q :- P) Konjunktion, (och) Disjunktion ; (eller) Använder modus ponens Negation A -> B A Q om P B

Kunskapsbas 4 woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).

Prologs variabler woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- woman(x). Stor begynnelsebokstav signalerar variabel

Instantiering av variabler woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- woman(x). X=mia X instantieras till första värdet som hittas i kunskapsbasen som gör påståendet sant.

Att fråga efter alternativ woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- woman(x). X=mia; Tryck på semikolon eller spacebar!

Att fråga efter alternativ woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- woman(x). X=mia; X=jody

Att fråga efter alternativ woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- woman(x). X=mia; X=jody; X=yolanda

Att fråga efter alternativ woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- woman(x). X=mia; X=jody; X=yolanda; no no signalerar att det inte finns flera svar

Kunskapsbas 4 woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- loves(marsellus,x), woman(x). Finns det nån kvinna som marsellus älskar?

Kunskapsbas 4 woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- loves(marsellus,x), woman(x). X=mia yes?-

Kunskapsbas 4 woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- loves(pumpkin,x), woman(x).

Kunskapsbas 4 woman(mia). woman(jody). woman(yolanda). loves(vincent, mia). loves(marsellus, mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin).?- loves(pumpkin,x), woman(x). no?-

Kunskapsbas 5 loves(vincent,mia). loves(marsellus,mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin). jealous(x,y):- loves(x,z), loves(y,z).?- jealous(marsellus,w).

Kunskapsbas 5 loves(vincent,mia). loves(marsellus,mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin). jealous(x,y):- loves(x,z), loves(y,z).?- jealous(marsellus,w). W=vincent?-

Kunskapsbas 5 loves(vincent,mia). loves(marsellus,mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin). jealous(x,y):- loves(x,z), loves(y,z). En aningen speciell definition av svartsjuka; X är svarsjuk på Y ifall både X och Y älskar samma Z. X Z Y

Kunskapsbas 5 loves(vincent,mia). loves(marsellus,mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin). jealous(x,y):- loves(x,z), loves(y,z). Hur skulle du ändra predikatet jealous för att beskriva situationen där man är svartsjuk på den som älskas av den som man själv älskar?

Kunskapsbas 5 Hur skulle du ändra predikatet jealous för att beskriva situationen där man är svartsjuk på den som älskas av den som man själv älskar? jealous(x,y):- loves(x,z), loves(z,y). X Z Y

Kunskapsbas 5 jealous(x,y):- loves(x,z), loves(z,y). X Z Obs! Eftersom Prologs unifiering fungerar såsom den fungerar, kommer denna definition också att innebära att man är svartsjuk på sig själv, ifall kärleken är besvarad; det finns ingenting som hindrar X och Y från att bindas till samma objekt! Y

Kunskapsbas 5 jealous(x,y):- loves(x,z), loves(z,y). X Y Z fallet X = Y

Kunskapsbas 5 jealous(x,y):- loves(x,z), loves(z,y). X Y Z fallet X = Z = Y Ifall vår kunskapsbas innehåller fall där någon älskar sig själv (mycket psykologiskt sunt nog!), får vi ännu konstigare situationer...

Kunskapsbas 5 jealous(x,y):- loves(x,z), loves(z,y). X Z fallet X = Z Denna person skulle också vara patologiskt svartsjuk på alla de andra personer han/hon älskar... Y

Kunskapsbas 5 jealous(x,y):- loves(x,z), loves(z,y). X Y Z fallet X = Z = Y För att undvika dessa tolkningar måste vi explicit förbjuda vissa bindningar i reglerna, ex. X \= Y. Vi ska se närmare på dessa i nästa kapitel, unifiering.

Strangelove...(konstiga bindningar)?- [strangelove].! % strangelove compiled 0.00 sec, 7 clauses! true.!?- listing.! jealous(a, C) :-!!loves(a, B),!!loves(B, C).! loves(jason, medeia).! loves(medeia, jason).! loves(medeia, khrysis).! loves(jason, jason).! true.! jason krysis medeia

Strangelove...(konstiga bindningar)?- jealous(medeia, X). X = medeia ; X = jason ; false. jason krysis medeia

Strangelove...(konstiga bindningar) [trace]?- jealous(medeia, X). Call: (6) jealous(medeia, _G337)? creep Call: (7) loves(medeia, _G407)? creep Exit: (7) loves(medeia, jason)? creep Call: (7) loves(jason, _G337)? creep Exit: (7) loves(jason, medeia)? creep Exit: (6) jealous(medeia, medeia)? creep jason X = medeia ; medeia som älskar jason är svartsjuk på den som jason älskar (= medeia) krysis medeia

Strangelove...(konstiga bindningar) Redo: (7) loves(jason, _G337)? creep Exit: (7) loves(jason, jason)? creep Exit: (6) jealous(medeia, jason)? creep X = jason ; medeia som älskar jason är svartsjuk på den som jason älskar (= jason) jason krysis medeia

Strangelove...(konstiga bindningar) Redo: (7) loves(medeia, _G407)? creep Exit: (7) loves(medeia, khrysis)? creep Call: (7) loves(khrysis, _G337)? creep Fail: (7) loves(khrysis, _G337)? creep Fail: (6) jealous(medeia, _G337)? creep false. Eftersom khrysis som medeia också älskar inte älskar någon, behöver medeia inte vara svartsjuk på denna någon. jason krysis medeia

Vad lär vi oss om detta? ALLT du skriver i reglerna tar Prolog bokstavligen. Prolog kommer att hitta alla de konstiga konsekvenser som dina regler kan ha. På detta sätt hjälper Prolog dig att skriva logiska definitioner utan luckor. Om du inte lär dig att täcka luckorna blir du snart din egen syster eller farfar.

Kunskapsbas 5 loves(vincent,mia). loves(marsellus,mia). loves(pumpkin, honey_bunny). loves(honey_bunny, pumpkin). jealous(x,y):- loves(x,z), loves(y,z). Observera att det är vi/ programmeraren som ger mening åt predikaten och dess argument, inte systemet!

Prologs syntax Vad exakt består fakta, regler och förfrågningar av? Terms Simple Terms Constants Variables Atoms Numbers Complex Terms

Atomer En sekvens av stora och små bokstäver, siffror eller understreck som börjar med en liten bokstav Exempel: butch, big_kahuna_burger, playguitar En arbiträr sekvens av tecken innesluten inom apostrofer Exempel: 'Vincent', 'Five dollar shake', '@$%' En sekvens av specialtecken Exempel: :, ;. :-

Tal Integers: 12, -34, 22342 Floats: 34573.3234

Variabler En teckensekvens som kan bestå av stora eller små bokstäver, siffror och _ och börjar med antingen en stor bokstav eller _. Exempel: Stor begynnelsebokstav signalerar ALLTID en variabel! X, Y, Variable, Vincent, _tag

Komplexa termer Atomer, tal och variabler är byggklossar för komplexa termer Komplexa termer byggs av en funktor som direkt åtföljs av en sekvens av argument Argumenten ges inom vanliga parenteser (), och separeras av kommatecken Funktorn måste vara en atom

Exempel på komplexa termer Exempel vi redan sett : playsairguitar(jody) loves(vincent, mia) jealous(marsellus, W) Komplexa termer inne i komplexa termer: hide(x,father(father(father(butch))))

Aritet Antalet argument en komplex term kräver kallas för dess aritet Exempel: woman(mia) är en term med aritet 1 loves(vincent,mia) har aritet 2 father(father(butch)) har aritet 1

Aritet är viktig I Prolog kan du definiera två predikat med samma funktor men med olika aritet Prolog skulle betrakta dessa som två olika predikat I Prolog-dokumentation anges ariteten av ett predikat vanligtvis med suffixet "/ efterföljt av ett nummer som representerar antalet argument

Exempel på aritet happy(yolanda). listens2music(mia). listens2music(yolanda):- happy(yolanda). playsairguitar(mia):- listens2music(mia). playsairguitar(yolanda):- listens2music(yolanda). Den här kunskapsbasen definierar happy/1 listens2music/1 playsairguitar/1

Övningar Inför nästa föreläsning ska du bekanta dig med Prolog-tolken swipl. Fundera genom (åtminstone) övningarna 1.1-1.2 från boken: Jobba genom practical session efter kapitel 1 i boken:

Sammandrag Enkla exempel på Prologprogram Introducerade tre baskonstruktioner i Prolog: Fakta Regler Förfrågningar Diskuterade andra begrepp, såsom logikens roll unifiering mha variabler Definition av Prologs byggstenar: termer, atomer och variabler

Nästa föreläsning Diskuterar unifiering i Prolog Prologs sökstrategi