Генератор без повторения на всички числа z, които се представят във вида z = x^y за x,y > 1 естествени числа.
div_while_possible(X, X):-!. div_while_possible(Z, X):-Z mod X =:= 0, Z1 is Z // X, div_while_possible(Z1, X).
Да се напише генератор gen_list(+M,+N,-L) на всички строго растящи редици от естествени числа от M до N включително. Допуска се и празната редица. Задачата има поне три различни по идея решения.
Упътване: подсписъци на списък, използване на between, рекурсивно свеждане към задачата за M+1 и N.
int(0). int(X):-int(Y), X is Y + 1. between(X, Y, X):- X =< Y. between(X, Y, Z):- X < Y, X1 is X + 1, between(X1, Y, Z). is_xy(Z):-Z1 is Z - 1, between(2, Z1, X), div_while_possible(Z, X), !. gen_xy(Z):-int(Z), is_xy(Z).
Предикат find_list(+M,+N,-L), който намира списък от всички строго растящи редици от естествени числа от M до N включително. Допуска се и празната редица. Задачата има поне две различни по идея решения. Упътване: последователно пораждане на всички редици, рекурсивно свеждане към задачата за M+1 и N.
add_x(_, [], []):-!. add_x(X, [H|T], [[X|H]|T1]):-add_x(X, T, T1). find_list(X, X, [[], [X]]):-!. find_list(X, Y, R):- add_x(X, L, L1), append(L1, L, R).