summaryrefslogtreecommitdiff
path: root/task4.pro
blob: ac9199e5088847682269aee1fb86e33365fb66aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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.