150 likes | 280 Views
Introduktion Logikprogrammering HT-02. Staffan Larsson. Mål och innehåll. inledande kurs i logik-programmering ges för datalingvister, kognitionsvetare, samt som fristående kurs avser att ge grundläggande färdigheter i Prolog
E N D
IntroduktionLogikprogrammering HT-02 Staffan Larsson
Mål och innehåll • inledande kurs i logik-programmering • ges för datalingvister, kognitionsvetare, samt som fristående kurs • avser att ge • grundläggande färdigheter i Prolog • grundläggande kunskap om allmänna datalogiska begrepp (rekursion, datastrukturer, etc.)
Lärare • Lärare • Staffan Larsson (kursansvarig): v.42, 46 • Rebecca Jonson: v.36, 38, 39 • Kenneth Wilhelmsson: v.44, 45, 47 • Pontus Johansson: v.40, 41, (49?) • David Hjelm: v.37, (43?) • Torbjörn Lager (ev.): v. 48 • Handledare (övningar & laborationer) • Niklas Een • Karl-Henrik Hagdal • Se hemsida för mailadresser, telefonnummer, etc.
Undervisning • hela terminen, v.36 2002 – v.02 2003 • Föreläsningar (v.36 – 49) • måndagar och onsdagar 13.15-15.00 • lokal: MDH • Övningar (v.36 – 48) • fredagar 10.15-12.00 • lokal: MD8 + MD10 • Laborationer (v.36 – 02) • måndagar 10-12, 15-19; onsdagar 10-12, 15-17; fredagar 13-17 • lokal: G, MD2 enligt schema • boka datorplats på anslagstavla på plan 1, MC • Projektarbete (v.45 – 02) • handledning enligt överenskommelse med handledare
Examinering • Tenta v.46, 16/11 • betyg: G (minst 50% rätt), VG (75%) • betyg sätts efter resultat på tentamen • Omtenta v.2, 10/1 • tentadelen: 5 poäng • Projektredovisning v.1+2 • projektdelen: 3 poäng • Inlämnade laborationer • laborationsdelen: 2 poäng
Kurslitteratur • Ivan Bratko: Prolog Programming for Artificial Intelligence, 3rd edition, Addison-Wesley 2001. • Finns t ex på Cremona (650:-) • Manual för SICStus Prolog version 3.8 • Säljs på distributionscentralen (DC), vid ED-huset på Chalmers • Kompendier som delas ut under kursens gång
Hemsida • www.ling.gu.se/~sl/logprog_02.html • Innehåll: • schema • föreläsningar • övningar • laborationer • kurslitteratur • övningar • laborationer • föreläsningsanteckningar • kurs-PM
Programmeringsspråk • Procedurella/imperativa språk. Man beskriver hur problemet ska lösas. • Exempel: basic, pascal, c, c++, java, ada, python, perl, ... • Deklarativa språk. Man försöker istället beskriva vad problemet är, och överlämnar åt datorn att bestämma exakt hur. • Funktionella språk. Exempel: lisp, scheme, ml, haskell, ... • Logiska språk. Exempel: prolog, mercury, oz, (sql), ...
Prolog • Ett prologprogram består av en mängd klausuler, som definierar ett antal predikat, eller relationer. • En klausul är antingen ett faktum, eller en regel. • Man kan se ett prologprogram som en databas, speciellt om programmet mestadels består av fakta. • Man kör prolog genom att ställa frågor till databasen. En fråga kallas även mål (efter engelskans goal).
Följande databas definierar vi först: gillar(pelle, lisa). gillar(pelle, mat). gillar(pelle, rödvin). gillar(pelle, mamma). gillar(lisa, astrid). gillar(lisa, mat). gillar(lisa, öl). gillar(lisa, mamma). gillar(astrid, pelle). gillar(astrid, jesus). gillar(astrid, öl). gillar(astrid, mat). gillar(astrid, pappa). gillar(astrid, rödvin Fakta (kap 1.1)
Fakta, forts. • Detta program definierar ett predikat gillar med 2 argument - vem som gillar och vad som gillas. • När man pratar om ett predikat så brukar man dessutom nämna hur många argument det har genom att skriva gillar/2. • Antal argument kallas argumenttal, ställighet eller aritet. • Definitionen av predikatet ovan består av 14 klausuler vilka alla är fakta.
Frågor (kap 1.1-1.4) • Nu kan man ställa frågor till prolog om programmet ovan. ?- gillar(pelle, lisa). yes ?- gillar(lisa, pappa). no • Här ser man att ordningen mellan argumenten är viktig.
Frågor, forts. • Dessutom kan man stoppa in variabler i stället för ett argument man inte känner till. ?- gillar(pelle, Vad). Vad = lisa ; Vad = mat ; Vad = rödvin ; Vad = mamma ; no (more solutions) ?- gillar(Vem, öl). Vem = lisa ; Vem = astrid ; no (more solutions)
Frågor, forts. • Det går också att ställa sammansatta frågor • separeras med ett kommatecken • Kommatecknet betyder att båda delmålen måste lyckas, vilket även kallas konjunktion. ?- gillar(lisa, Vad), gillar(astrid, Vad). Vad = mat ; Vad = öl ; no (more solutions)
Frågor, forts. • Observera att man kan ge målen i en annan ordning, i vilket fall man får samma svar, men kanske i en annan ordning. ?- gillar(astrid, Vad), gillar(lisa, Vad). Vad = öl ; Vad = mat ; no (more solutions) • Detta beror på att prolog söker i databasen uppifrån och ner, samt försöker lösa det första (vänstraste) målet innan den försöker vidare. • Detta söksätt kallas backtracking, läs mer om det i boken.