% vim:set syntax=prolog: ?- writeln("Задание 1:"). pow(0, 0, 0) :- writeln("0^0 не определён"), !. pow(_, 0, 1) :- !. pow(0, _, 0) :- !. pow(X, N, Res) :- N1 is N - 1, pow(X, N1, Res1), Res is Res1 * X. ?- write("2^5 = "), pow(2, 5, P), writeln(P). ?- write("0^5 = "), pow(0, 5, P), writeln(P). ?- write("0^0 = "), pow(0, 0, P), writeln(P). ?- nl, nl, writeln("Задание 2:"). fib(1, 0) :- !. fib(2, 1) :- !. fib(N, F) :- N2 is N - 2, N1 is N - 1, fib(N2, F2), fib(N1, F1), F is F1 + F2. ?- fib(10, F), writeln(F). ?- nl, nl, writeln("Задание 3:"). hanoi(N) :- move(N, 'A', 'C', 'B'). move(1, A, C, _) :- write('Переместить диск с вершины '), write(A), write(' на '), write(C), nl. move(N, A, C, B) :- N > 1, M is N - 1, move(M, A, B, C), move(1, A, C, _), move(M, B, C, A). ?- hanoi(3). % ?- halt.