summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--task4.pro35
1 files changed, 35 insertions, 0 deletions
diff --git a/task4.pro b/task4.pro
new file mode 100644
index 0000000..ac9199e
--- /dev/null
+++ b/task4.pro
@@ -0,0 +1,35 @@
+% 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.