Генератор за Prolog


Генератор без повторения на всички числа 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).
  1. Няма коментари.
(will not be published)