Програма за проверка, дали елементите на даден списък образуват аритметическа прогресия на Пролог.\
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]]).