Presentation laddar. Vänta.

Presentation laddar. Vänta.

Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.

Liknande presentationer


En presentation över ämnet: "Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar."— Presentationens avskrift:

1 aritmetik 3.4 M 8.2 E 2.2

2 dagens föreläsning operatorer för aritmetik tillämpningar

3 aritmetik i prolog aritmetik utförs av inbyggda predikat argumenten är aritmetiska uttryck ett aritmetiskt uttryck kan bestå av: –siffror, –variabler, –funktorer

4 operatorer i prolog traditionell notation 6+2 = 8 6*2 = = 4 6/2 = 3 prolog 8 is is 6*2. 4 is is 6/2. is/2 tar två argument, varav det andra måste vara ett giltigt aritmetiskt uttryck (med alla variabler instansierade). Det första måste vara antingen en siffra, eller en variabel som representerar en siffra.

5 exempel ?- X = X = ?- X is X = 5 =matchar isutvärderar (evaluerar)

6 fler operatorer **upphöjt //heltalsdivision modmodulo (rest vid heltalsdivision) >större än =större el. lika med <=mindre el. lika med =\=inte lika med (evaluerat värde) \=inte lika med

7 \= och =\= ?- 3 \= 3. no ?- 3 =\= 3. no ?- 3 \= 4. yes ?- 3 =\= 4. yes ?- 3 \= 2+1. yes ?- 3 =\= 2+1. no ’3’ är skilt från ’2+1’? ’värdet av 3’ är skilt från ’värdet av 2+1’?

8 fler operatorer (forts.) X =:= Y värdet av X är lika med värdet av Y (’forced evaluation’) Jämför med: X = Y matcha X med Y (och instansiera om det går!) ? =:= yes ? = no ’värdet av 1+2’ är lika med ’värdet av 2+1’? ’1+2’ är lika med ’2+1’?

9 fler operatorer (forts.) X == Yidentitetsrelationen, X och Y är identiska variabler (dvs har samma namn), eller är identiska operationer applicerade på identiska termer

10 aritmetik i prolog (forts.) aritmetiska uttryck kan ses som datastrukturer för att utvärdera uttrycken ges de som argument till något av de inbyggda predikaten som tvingar utvärdering:

11 inbyggda predikat som evaluerar Z is X X =:= Y X =\= Y X < Y X > Y X =< Y X >= Y

12 exempel ?- X = 2, Y is X+1. X = 2, Y = 3 ? ?- X = 2, Y = X+1. X = 2, Y = 2+1 ?- X = 2, Y =:= X+1. Instantiation error in argument 1 of =:= /2 goal: _76=:=2+1 ?- X = 2, 3 =:= X+1. X = 2 ?- X=3, X =:= 2+1, X is 1+2. X = 3

13 funktioner och relationer aritmetiska operatorer kan delas in i: –funktioner (t ex +, -, max, sqrt, etc.) –relationer (t ex, etc.) relationer utvärderar alltid (is/2 behövs alltså inte) Fler SICStus-specifika operatorer finns i M 8.2. (trigonometri etc.)

14 sammanfattning Z is X X, som måste vara ett aritmetiskt uttryck, utvärderas och resultatet unifieras med Z. X = Y variablerna X och Y är lika: X är unifierbar med Y. X =:= Y det numeriska värdet av X och Y är lika. X =\= Y de numeriska värdena av X och Y är olika. X == Y identitetsrelationen

15 sammanfattning (forts.) X < Y Det numeriska värdet av X är mindre än det numeriska värdet av Y. X > Y Det numeriska värdet av X är större än det numeriska värdet av Y. X =< Y Det numeriska värdet av X är mindre eller lika med det numeriska värdet av Y. X >= Y Det numeriska värdet av X är större eller lika med det numeriska värdet av Y.

16 lite om notation X is 3+2. % ’is’ infix % ’+’ infix X is +(3,2). % ’is’ infix % ’+’ prefix is (X, +(3,2)). % ’is’ prefix % ’+’ prefix is X+ 32

17 applikation 1 length/2 räknar ut längden av en lista. length([],0). length([_|Tail], N) :- length(Tail, N1), N is 1 + N1. Obs! N1 måste vara instansierat. Alltså det rekursiva anropet först!

18 körning… ?- length([a,b,c],N). N = 3 ?- length([a,b,[c,d],e],N). N = 4

19 använd ’=’ ist. f. ’is’ length2([],0). length2([_|Tail], N) :- length2(Tail, N1), N = 1 + N1.

20 körning… ?- length2([a,b,[c,d],e],N). N = 1+(1+(1+(1+0)))

21 applikation 2 summera/3 summerar alla heltal mellan två givna tal. summera(N, N, N). summera(N, M, Summa) :- N < M, N1 is N+1, summera(N1, M, Delsumma), Summa is N + Delsumma.

22 körning… ?- summera(1,10,X). X = 55 ?- summera(1,1000,X). X =

23 analys summera(1,2,Summa). 1 < 2 N1 is 1+1 summera(2,2,Delsum) Summa is 1+2 Summa = 3 summera(N, N, N). summera(N, M, Summa) :- N < M, N1 is N+1, summera(N1,M,Delsum), Summa is N + Delsum. true! N1=2 Basfallet: Delsum=2 Summa=3

24 applikation 3 sumlista/2 summerar elementen i en lista sumlista([],0). sumlista([N|Ns], Summa) :- sumlista(Ns,Delsumma), Summa is N+Delsumma.

25 körning… ?- sumlista([3,4,2,2],S). S = 11

26 applikation 4 vad kan göras med length/2 och sumlista/2? medel/2 räknar ut medelvärdet av talen i en lista. :- consult('length.pl'). :- consult('sumlista.pl'). medel(Lista, Medel) :- sumlista(Lista,Summa), length(Lista,Antal), Medel is Summa/Antal.

27 körning… ?- medel([1,2,3,4,5], Avg). Avg = 3.0 ?- medel([0],A). A = 0.0

28 medel([4,6],X) sumlista ([4,6],Y) length ([4,6],Z) X is Y/Z sumlista ([6],Y1) Y is 4+Y1 sumlista ([],Y2) Y1 is 6+Y2 length ([6],Z1) length ([],Z2) Z is 1+Z1 Z1 is 1+Z2 Y2=0Y1=6+0 Y=4+6 Z2=0Z1=1+0 Z=1+1 X=10/2 sumlista ([4,6],Y) sumlista ([6],Y1) sumlista ([],Y2) Y1 is 6+Y2 Y is 4+Y1 length ([4,6],Z) length ([6],Z1) length ([],Z2) Z1 is 1+Z2 Z is 1+Z1 X is Y/Z medel([4,6],X) X=5 Y=10Z=2

29 applikation 5 kvadratsumma/2 summerar kvadraten av värdena i en lista. kvadratsumma([],0). kvadratsumma([N|Ns], Summa) :- kvadratsumma(Ns,Delsumma), Summa is N*N + Delsumma.

30 körning… ?- kvadratsumma([1,2],X). Call: kvadratsumma([1,2],_464) Call: kvadratsumma([2],_996) Call: kvadratsumma([],_1508) Exit: kvadratsumma([],0) Call: _996 is 2*2+0 Exit: 4 is 2*2+0 Exit: kvadratsumma([2],4) Call: _464 is 1*1+4 Exit: 5 is 1*1+4 Exit: kvadratsumma([1,2],5) X = 5 ? Basfallet: Delsumma=0 kvadratsumma([],0). kvadratsumma([N|Ns], Summa) :- kvadratsumma(Ns,Delsumma), Summa is N*N + Delsumma.

31 nästa föreläsning ackumulatorer litteratur: –CM 3.7 –AOP 8.3 –(BBS 5.3, 6.2.2)


Ladda ner ppt "Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar."

Liknande presentationer


Google-annonser