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.
|