Presentation laddar. Vänta.

Presentation laddar. Vänta.

Föreläsning 13 Logik med tillämpningar 97-12-05. Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.

Liknande presentationer


En presentation över ämnet: "Föreläsning 13 Logik med tillämpningar 97-12-05. Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat."— Presentationens avskrift:

1 Föreläsning 13 Logik med tillämpningar

2 Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat u Shapiro, 8-10

3 Aritmetik  Aritmetik hanteras annorlunda i Prolog än i logikprog- rammering av effektivitetsskäl. Definitionen av plus: plus(0,X,X)  nat_num(X). plus(s(X),Y,s(Z))  plus(X,Y,Z). tar tid proportionellt mot storleken på sitt första argument! u I Prolog har man istället ett gränssnitt mot CPU:ns aritmetiska funktioner. u Priset för detta:Vissa aritmetiska funktioner inte är lika generella som sina logiska ekvivalenter.

4 Evaluering  Systempredikatet is(Value, Expression) skrivs oftast Value is Expression.  Tolkas genom att Expression evalueras som ett aritmetiskt uttryck och unifieras med Value och lyckas eller misslyckas i enlighet med resultatet. u X is 3 + 5? 8 is 3 + 5? is 3 + 5? yes yes no X=8. u X is 3 + x? X is 3 + Y? no yes/error

5 Rekursiva vs iterativa program u Finns inga iterativa konstruktioner i Prolog men man kan skriva rekursivt program som motsvarar ett iterativt. u Ett rekursivt program kräver mer minne (linjärt proportionellt mot antalet iterationer (n).) u Ett iterativt program kräver lika mycket minne oavsett hur stort antal iterationer som krävs.

6 Fakultetsfunktionen  Rekursivt: fac(N,F) :- N > 0, N1 := N -1, fac(N1,F1), F := N * F1. fac(0,1).  Iterativt: fac(N,F) :- fac(N,1,F). fac(N,T,F) :- N > 0, T1 := T*N, N1 := N - 1, fac(N1,T1,F). fac(0,F,F).

7 Summera en lista av heltal u Rekursivt sumlist([I | Is],S) :- sumlist(Is,S2), S := I + S2. sumlist([ ],0). u Iterativt: sumlist(Is,S) :- sumlist(Is,0,S). sumlist([I | Is],T,S):- T2 := T + I, sumlist(Is,T2,S). sumlist([ ], S, S).

8 Symboliska uttryck i Prolog u Vi har använt Prolog för att manipulera naturliga tal, listor och binära träd tidigare. u Vi kan hantera symboliska uttryck också. u Vi ska bygga en deriverare i Prolog. u Svårighet med kedjeregeln:

9 Typpredikat

10 Vad behöver man typpredikat till?  Antag att vi har en lista av listor och element, tex [a, [a, c], c, [a, b, [c, d], [e]], f] som vi vill ”platta ihop” till en lista [a, a, c, c, a, b, c, d, e, f]. u Vi måste veta om ett element i listan är en lista eller inte. u Vi använder typpredikatet list för detta ändamål.

11 Sammansatta termer u Att kunna känna igen och arbeta på bestånds- delarna av en sammansatt term är ganska viktigt i Prolog.  Följande predikat är bra hjälpmedel: functor(Term,F,Arity). arg(N,Term,Arg). Term=.. List.

12 Kan vi uttnyttja det för vårt problem med kedjeregeln?  Ja! Om vi använder =.. så kan vi få fram argumenten. Om vi har f(g(x)) =.. [F, G_X] så blir F = f och G_X = g(x)  Dessutom får vi en gratis koll av att f är en funktion med aritet 1 på samma gång!

13 Metalogiska predikat u En användbar extension av logikprogram är de så kallade metalogiska predikaten. Dessa går utanpå första ordningens predikatlogik och tillåter oss till exempel att tolka variabler (snarare än de objekt de representerar) som språkelement. u var(Term) u nonvar(Term)

14 Metalogiska predikat återställer en del av flexibiliteten i Prolog: u Predikatet plus kan i logikprogrammering utöver för addition användas för både subtraktion och uppdelning av ett tal i två mindre tal.  Motsvarande uttryck i Prolog X := Y + Z. kan bara användas för addition.

15  Metalogiska predikat kan också användas för att uppnå bästa val av målordning i ett program. Minns vår tidigare diskussion om predikatet farfar farfar(X,Z) :- far(X,Y), far(Y,Z). farfar(X,Z) :- far(Y,Z), far(X,Y). u Den första definitionen var bättre om vi sökte efter ett barnbarn till X, den andra om vi sökte en farfar till Z. u Denna distinktion kan vi nu uppnå med hjälp av våra metalogiska predikat.

16 Jämförelse av termer u I vissa fall måste vi undersöka om två variabler är identiska (och inte bara unifierbara, som ju alla par av variabler är). Detta är en metalogisk test. u För detta ändamål har Prolog ett systempredikat ==/2.

17 u Målet(X == Y)? lyckas om X och Y är identiska konstanter, identiska variabler, eller om bägge är strukturer vars funktorer har samma namn och aritet och om (Xi == Yi)? för alla matchande argument Xi och Yi för X respektive Y. Annars misslyckas det. u X==5 misslyckas alltså, till skillnad mot X=5. u Vi har också ett predikat \== som har det precis motsatta beteendet. X \== Y lyckas utom när X och Y är identiska termer.

18 Olika jämförelsepredikat  X is Evaluerar det högra argumentet (aritmetiskt uttryck) och jämför med det vänstra.  3 =:= Evaluerar båda argumenten (aritmetiska uttryck) och jämför sedan.  X = Y Kollar om man kan unifiera X och Y.  X == Y Kollar om termerna X och Y är identiska.


Ladda ner ppt "Föreläsning 13 Logik med tillämpningar 97-12-05. Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat."

Liknande presentationer


Google-annonser