Fakultt in Prolog Das Programm und die Lsungssuche

  • Slides: 12
Download presentation
Fakultät in Prolog Das Programm und die Lösungssuche Präsentation von Philipp Hauer '07 ©

Fakultät in Prolog Das Programm und die Lösungssuche Präsentation von Philipp Hauer '07 © 23. 11. 2020 1

Ablauf � Die Fakultät � Umsetzung in Java � Umsetzung in Prolog ◦ Leistungen

Ablauf � Die Fakultät � Umsetzung in Java � Umsetzung in Prolog ◦ Leistungen ◦ Der Suchbaum � Das Prinzip � Aufgaben Präsentation von Philipp Hauer '07 © 23. 11. 2020 2

Die Fakultät � Z. ◦ ◦ ◦ B. : 0! 1! 2! 3! 4!

Die Fakultät � Z. ◦ ◦ ◦ B. : 0! 1! 2! 3! 4! 5! � Es = = = 1 1*2 = 2 1*2*3 = 6 1*2*3*4 = 24 1*2*3*4*5 = 120 gilt: ◦ 0! = 1 ◦ n! = n * (n - 1)! (Abbruchbedingung) (rekursiver Fall) Präsentation von Philipp Hauer '07 © 23. 11. 2020 3

Umsetzung in Java public int fakultaet(int n){ int m = n - 1; while(m>0){

Umsetzung in Java public int fakultaet(int n){ int m = n - 1; while(m>0){ n = n*m; m--; } return n; } � Z. B. : 3! ◦ n= ◦ m= 3… 2… 6… 1… 6 0 Präsentation von Philipp Hauer '07 © 23. 11. 2020 4

Umsetzung in Prolog fak(0, 1). fak(N, F): N > 0, N 1 is N

Umsetzung in Prolog fak(0, 1). fak(N, F): N > 0, N 1 is N - 1, fak(N 1, F 1), F is N * F 1. Abbruchbedingung/Rekursionsausstieg Rekursiver Fall: Rückbezug auf Definition � Leistungen ◦ Entscheidungsfragen �Z. B. : fak(3, 6) yes ◦ Bedingt Ergänzungsfragen �Z. B. : fak(3, F) F = 6 �Nicht: fak(N, 6) n. l. Präsentation von Philipp Hauer '07 © 23. 11. 2020 5

fak(4, F). fak(0, 1) N 4 no 1 fak(N, Fa). N>0 N 1 is

fak(4, F). fak(0, 1) N 4 no 1 fak(N, Fa). N>0 N 1 is N -1 yes 3 is 4 -1 fak(N 1, F 1 a) Fa is N * F 1 a fak(N, F): N 1 N F 1 F N 1 = 3 fak(3, Fb) N 3 fak(0, 1) no 2 N>0 N 1 is N -1 yes 2 is 3 -1 fak(N 1, F 1 b) Fb is N * F 1 b N 1 = 2 fak(0, 1). fak(N, F): N > 0, N 1 is N - 1, fak(N 1, F 1), F is N * F 1. Call: Exit: Call: (7) (8) (8) (8) (9) (9) (9) fak(4, _G 417) ? 4>0 ? _L 172 is 4 -1 ? 3 is 4 -1 ? fak(3, _L 173) ? 3>0 ? _L 191 is 3 -1 ? 2 is 3 -1 ? fak(2, _L 192) ? fak(2, Fc) Präsentation von Philipp Hauer '07 © 23. 11. 2020 6

… fak(2, Fc) N 2 N>0 N 1 is N -1 yes 1 is

… fak(2, Fc) N 2 N>0 N 1 is N -1 yes 1 is 2 -1 3 N 1 = 1 … N 1 N>0 N 1 is N -1 yes 0 is 1 -1 4 N 1 = 0 Fc is N * F 1 c fak(N 1, F 1 c) fak(1, Fd) fak(N 1, F 1 d) Fd is N * F 1 d fak(0, Fe) fak(0, 1) Match! Fe 1 Präsentation von Philipp Hauer '07 © fak(0, 1). fak(N, F): N > 0, N 1 is N - 1, fak(N 1, F 1), F is N * F 1. Call: Exit: Call: (10) (10) 2>0 ? _L 210 is 2 -1 ? 1 is 2 -1 ? fak(1, _L 211) ? Call: Exit: (11) (11) 1>0 ? _L 229 is 1 -1 ? 0 is 1 -1 ? fak(0, _L 230) ? fak(0, 1) ? 23. 11. 2020 7

… N>0 N 1 is N -1 1 is 2 -1 yes 3 N>0

… N>0 N 1 is N -1 1 is 2 -1 yes 3 N>0 4 fak(N 1, F 1 c) Fc is N * F 1 c fak(1, 1) Fc is 2 * 1 Fc = 2 N 1 = 1 … yes fak(2, Fc) N 2 N 1 is N -1 fak(1, Fd) fak(N 1, F 1 d) fak(0, 1). fak(N, F): N > 0, N 1 is N - 1, fak(N 1, F 1), F is N * F 1. Fd is N * F 1 d Fd is 1 * 1 0 is 1 -1 N 1 = 0 Fd F 1 c = 1 fak(0, Fe) fak(0, 1) Match! Fd = 1 Fe F 1 = 1 Exit: (11) fak(0, 1) ? Call: (11) _L 211 is 1*1 ? Exit: (11) 1 is 1*1 ? Exit: (10) fak(1, 1) ? Call: (10) _L 192 is 2*1 ? Exit: (10) 2 is 2*1 ? Präsentation von Philipp Hauer '07 © Exit: 23. 11. 2020 8 (9) fak(2, 2) ?

fak(4, F). fak(0, 1) N 4 no 1 (9) (9) (8) (8) (7) F

fak(4, F). fak(0, 1) N 4 no 1 (9) (9) (8) (8) (7) F = 24 ; fak(N, Fa). N>0 N 1 is N -1 fak(N 1, F 1 a) Fa is N * F 1 a yes 3 is 4 -1 fak(3, 6) Fa is 4 * 6 N 1 = 3 Fa = 24 N 3 N>0 Exit: Call: Exit: fak(4, 24). F = 24 N 1 is N -1 fak(2, 2) ? 2 is 3 -1 yes _L 173 is 3*2 ? N 1 = 2 6 is 3*2 ? fak(3, 6) ? _G 417 is 4*6 ? 24 is 4*6 ? fak(4, 24) ? Fb F 1 a = 6 fak(3, Fb) fak(N 1, F 1 b) Fb is N * F 1 b fak(2, 2) Fb is 3 * 2 Fb = 6 Fc F 1 b = 2 fak(2, Fc) Präsentation von Philipp Hauer '07 © 23. 11. 2020 9

fak(0, 1). … N fak(N, F): 2 N > 0, N 1 is N

fak(0, 1). … N fak(N, F): 2 N > 0, N 1 is N - 1, N>0 N 1 F 1), is N -1 fak(N 1, F is N 1 *is F 1. 2 -1 yes 3 yes 4 fak(N 1, F 1 c) Fc is N * F 1 c fak(1, 1) Fc is 2 * 1 Fd = 2 N 1 = 1 … N>0 fak(2, Fc) N 1 is N -1 fak(N 1, F 1 d) Fd is N * F 1 d Fd is 1 * 1 Fd = 1 N 1 = 0 Match! Fd F 1 c = 1 fak(1, Fd) 0 is 1 -1 fak(0, 1) Redo: (11) fak(0, _L 230) ? Call: (12) 0>0 ? Fail: (10) fak(1, _L 211) ? Fail: (9) fak(2, _L 192) ? Fail: (8) fak(3, _L 173) ? Fail: (7) fak(4, _G 417) ? No fak(0, Fe) F 1 1 Backtracking! N 0 N>0 no N 1 is N -1 fak(N 1, F 1 e) Fe is N * F 1 e Keine weiteren Lösungen. Präsentation von Philipp Hauer '07 © 23. 11. 2020 10

Das Prinzip � „Hinweg“ ◦ N wird in N Schritten je um 1 vermindert

Das Prinzip � „Hinweg“ ◦ N wird in N Schritten je um 1 vermindert ◦ auf einfachen Fall fak(0, 1) reduziert ◦ 4 3 2 1 0 � „Rückweg“ ◦ zunehmendes N wird mit Ergebnis von N*F 1 multipliziert ◦ N Multiplikationen ◦ 1*1=1 2*1=2 3*2=6 4*6=24 Präsentation von Philipp Hauer '07 © 23. 11. 2020 11

Aufgaben � Welche Bedeutung haben die einzelnen Ausdrücke/Zeilen für das Programm: fak(0, 1). fak(N,

Aufgaben � Welche Bedeutung haben die einzelnen Ausdrücke/Zeilen für das Programm: fak(0, 1). fak(N, F): N > 0, N 1 is N - 1, fak(N 1, F 1), F is N * F 1. � Schreibe den Suchbaum zur Entscheidungsfrage fak(3, 6). Präsentation von Philipp Hauer '07 © 23. 11. 2020 12