Варианты заданий
Вариант 1
1. Определите возведение в целую степень через умножение и деление.
2. Напишите предикат p(+L, -N) - истинный тогда и только тогда, когда N - предпоследний элемент списка L, имеющего не менее двух элементов.
3. Напишите предикат, аналогичный предикату subst (см. вариант 8, задача2), но производящий взаимную замену X на Y, т.е. X->Y, Y->X.
4. Напишите предикат, который определяет, является ли данное натуральное число простым. Воспользуйтесь более общей задачей: ispr(N, M) - "Число N не делится ни на одно число большее или равное M и меньшее N".
Имеем ispr(N, M) -истинно, во-первых, если N = M, и, во-вторых, если истинно ispr(N,M+1) и N не делится на M.
5. Напишите предикат p(+N, +K, -L) - истинный тогда и только тогда, когда L - список всех последовательностей (списков) длины K из чисел 1,2,...,N.
Определим два вспомогательных предиката literal(X) и dis(X), которые проверяют является ли X литералом и элементарной дизъюнкцией соответственно.
literal(true).
literal(false).
literal(~ X):-
literal(X).
dis(X):-
literal(X).
dis(X v Y):-
literal(X),
dis(Y).
con(X):- dis(X).
con(X & Y):-
dis(X),
con(Y).
?- con( true & (~ false v true v false) & ~ true).
Yes
Задача 5b
p(1,[[0],[1],[2]]).
p(N,R):- N>1,
N1 is N-1,
p(N1,R1),
t(R1,R).
t([],[]).
t([X|T],Z):-
t(T,R1),
s(X,R),
append(R,R1,Z).
s([0|T],[[1,0|T],[2,0|T]]).
s([1|T],[[0,1|T],[2,1|T]]).
s([2|T],[[0,2|T],[1,2|T]]).
|