Prolog – Arithmetic progression – Проверка за аритметическа прогресия


Програма за проверка, дали елементите на даден списък образуват аритметическа прогресия на Пролог.\

aritmethmeticProgression([X,Y|[]],D):- D =:= Y-X.
aritmethmeticProgression([X,Y|L],D):- D =:= Y-X, aritmethmeticProgression([Y|L],D).
arithProgression([X,Y|[]]).
arithProgression([X,Y|L]) :-D is Y-X, ar([Y|L],D).
?-arithProgression([1,2,3,4,5])

или по-просто

aritm([X,Y]).
aritm([X,Y|[Y1|S]]):-aritm([Y,Y1|S]), X-Y=:=Y-Y1.

чрез сума на елементите на списък може да намерим, по даден списък от списъци от числа, дали неговите суми на списъци, дали образуват аритметична прогресия.
Това е задача от контролно по „Логическо Програмиране“, във ФМИ на СУ:
Да се дефинира на пролог предикат p(X), който по даден списък X = [X1,…,Xn] от списъци от числа (където n може да бъде 0) проверява дали сумите на елементите на елементите на X (общо n на брой) образуват аритметична прогресия.

ar([X,Y|[]],D):-sum(Y,SY),sum(X,SX), D =:= SY-SX.
ar([X,Y|L],D):-sum(Y,SY),sum(X,SX), D =:= SY-SX, ar([Y|L],D).
a([X,Y]).
a([X,Y|L]) :-sum(Y,SY),sum(X,SX),D is SY-SX, ar([Y|L],D).

sum([],0).
sum([X|L],N1):-sum(L,N), N1 is N+X.
?-a([[1,2,3],[1,2,3,4],[1,2,3,4,4],[1,2,3,4,4,4],[1,2,3]]).

Втори начин:

p(X):-spspSum(X,L),aritm(L).
?-p([[1,2,3],[1,2,3,4],[1,2,3,4,4],[1,2,3,4,4,4]]).

spspSum([],[]).
spspSum([X|L],[S|Y]):-spspSum(L,Y),sum(X,S).
%?-spspSum([[1,2,3,4,5],[1,2],[2,5,7]],N),write(N).

aritm([X,Y]).
aritm([X,Y|[Y1|S]]):-aritm([Y,Y1|S]), X-Y=:=Y-Y1.

sum([],0).
sum([X|L],N1):-sum(L,N), N1 is N+X.
%?-a([[1,2,3],[1,2,3,4],[1,2,3,4,4],[1,2,3,4,4,4],[1,2,3]]).
  1. Няма коментари.
(will not be published)