Presentation laddar. Vänta.

Presentation laddar. Vänta.

Karl-Henrik Hagdahl, 11 november 20021 Repetition Logikprogrammering: måndag 11 november 2002.

Liknande presentationer


En presentation över ämnet: "Karl-Henrik Hagdahl, 11 november 20021 Repetition Logikprogrammering: måndag 11 november 2002."— Presentationens avskrift:

1 Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002

2 Karl-Henrik Hagdahl, 11 november översikt predikat och frågor enkla termer sammansatta termer backtracking unifiering rekursion –mappning och filtrering –sortering grammatiker (CFG) DCG-notation aritmetik ackumulatorer operatorer binära träd in- och uthantering findall, setof, bagof cut

3 Karl-Henrik Hagdahl, 11 november predikat och frågor förälder/2 och förfader/2 förälder(marit, mette-marit). förälder(mette-marit, marius). förfader(X,Z) :- förälder(X,Z). förfader(X,Z) :- förälder(X,Y), förfader(Y,Z). ?- förfader(X, marius). X = mette-marit ? ; X = marit ? yes huvud kropp fakta regler fråga klausuler (totalt 4 st.) aritet (ställighet)

4 Karl-Henrik Hagdahl, 11 november enkla termer atomer: pelle, ’liten.fel.txt’, + tal: 42 variabler: Träd, _Träd, _

5 Karl-Henrik Hagdahl, 11 november sammansatta termer (strukturer) Flera termer kan sättas ihop till en sammansatt term med hjälp av en funktor: Listor (med funktorn ”.”) ?- [h,e,j|[]] =.(h,.(e,.(j,[]))). yes Strängar ?- "hej" = [h,e,j]. yes Egna strukturer fras(np,[ord(namn,"lisa"),fras(prps,[])]) t(Left, Elem, Right) point(1,1)

6 Karl-Henrik Hagdahl, 11 november backtracking (tillbaka-spårning) När ett mål misslyckas går Prolog tillbaka till det senast uppfyllda målet för att försöka hitta alternativa lösningar. riktning: vänstra övre hörnet ->åt höger, nedåt. Vid if-then-else lyckas inte backtracking. ? – (X=a ; X=b), (Y=X ; Y=c). X = a, Y = a ? ; X = a, Y = c ? ; X = b, Y = b ? ; X = b, Y = c ? ; no ?- ((X=a ; X=b) -> Y=X ; Y=c). X = a, Y = a ? ; no

7 Karl-Henrik Hagdahl, 11 november unifiering (matchning) Unifiering av två termer lyckas om: –minst en av termerna är en oinstansierad variabel eller … –termerna är samma atom eller samma tal –termerna är två sammansatta termer där funktor och argument matchar Två variabler som unifierats är därefter identiska. ?- X = 1, Y = 2, X \= Y. X = 1, Y = 2 ? yes ?- X = 1, X \= Y, X = 2. no ?- X = Y, X == Y. Y = X ? yes ?- X == Y, X = Y. no

8 Karl-Henrik Hagdahl, 11 november rekursion Rekursiva predikat har alltid (minst) ett rekursivt anrop och (minst) ett basfall. Basfallet innehåller inget rekursivt anrop. Basfallet/en bör alltid göras så få och enkla som möjligt. Basfallet deklareras ofta som ett fakta, men inte alltid. Rekursionsfallet är alltid en regel (det rekursiva anropet sker i kroppen). rekursivt_predikat([basfall]). rekursivt_predikat([rekursion|Anrop]) :- rekursivt_predikat(Anrop). ?- rekursivt_predikat(Anrop). Anrop = [basfall] ? ; Anrop = [rekursion,basfall] ? ; Anrop = [rekursion,rekursion,basfall] ? ; och så vidare …

9 Karl-Henrik Hagdahl, 11 november mappning och filtrering Mappning är när man utför något på varje element i en lista och stoppa in resultatet i en ny lista. ?- leka_rövare("kalle",Rövartext). Rövartext = "kokalollole" ? yes Filtrering genererar också en ny lista, men väljer ut vissa element ur en lista och kastar resten av dem. ?- kasta_vokaler("Nefertiti",Sträng). Sträng = "Nfrtt" ? yes

10 Karl-Henrik Hagdahl, 11 november sortering insertionsort/2 : Sätt in ett element i taget på rätt plats med insert/3. quicksort/2 : Välj ett pivotelement och dela listan i mindre och större element med delning/3. Sortera delarna rekursivt och sätt ihop. mergesort/2 : Dela listan i två lika stora delar med halvera/3. Sortera delarna och sätt ihop dem med merge/3.


Ladda ner ppt "Karl-Henrik Hagdahl, 11 november 20021 Repetition Logikprogrammering: måndag 11 november 2002."

Liknande presentationer


Google-annonser