Задача на Пролог – генератори


Дефиниция на ПРОЛОГ на предикат p(X,Y,N), който по дадени естествени числа X,Y връща в N:
Вариант А
броят на числата, които делят X, но не делят Y
Вариант Б
броят на общите делители на X и Y
б) Да се напише генератор без повторения на множеството
Вариант А
{ (x,y) | x>=1, y>=1 и броят на числата, който делят X, но не делят Y е точно Y }
Вариант Б
{ (x,y) | x>=y и броят на общите делители на X и Y е точно 5 }
Време за работа – 2 часа.

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

ph(X, X, _, 0):-!.
ph(X, _, D, 0):- D > X, !.
ph(X, Y, D, N):- D =< X, X mod D =:= 0, Y mod D =\= 0, !, D1 is D + 1, ph(X, Y, D1, N1), N is N1 + 1.
ph(X, Y, D, N):- D =< X, D1 is D + 1, ph(X, Y, D1, N).

zad2_p(X, Y, N):- ph(X, Y, 2, N).

zad2_gen_xy([X, Y]):-int(X), between(1, X, Y), zad2_p(X, Y, Y).
?-zad2_p(17,12,X),write(X).
  1. Няма коментари.
(will not be published)