Для квадратной матрицы определить, содержит ли она два разных столбца, с одинаковой суммой элементов - Prolog

Узнай цену своей работы

Формулировка задачи:

Для квадратной матрицы определить, содержит ли она два разных столбца, с одинаковой суммой элементов

Решение задачи: «Для квадратной матрицы определить, содержит ли она два разных столбца, с одинаковой суммой элементов»

textual
Листинг программы
domains
int=integer
intl=int*
intll=intl*
 
predicates
nth(int,intl,int)
getcol(intll,int,intl)
sumcol(intll,int,intl)
suml(intl,int)
memb(int,intl)
haseq(intl)
lenl(intll,int)
task(intll)
 
 
clauses
 
lenl([],0).
lenl([_|T],N) :- lenl(T,N1), N=N1+1.
 
haseq([]):- fail.
haseq([H|T]) :- memb(H,T), !.
haseq([_|T]) :- haseq(T).
 
memb(_,[]) :- fail.
memb(H,[H|_]) :- !.
memb(H,[X|T]) :- H<>X, memb(H,T).
 
suml([],0).
suml([H|T],S) :- suml(T,S1), S=S1+H.
 
nth(1,[H|_],H).
nth(N,[_|T],R) :- N1=N-1, nth(N1,T,R).
 
getcol([],_,[]).
getcol([H|T],N,[A|R]):- nth(N,H,A), getcol(T,N,R).
 
sumcol(_,0,[]).
sumcol(X,N,[S|T]) :- getcol(X,N,R), suml(R,S), N1=N-1, sumcol(X,N1,T).
 
task(X) :- lenl(X,N), sumcol(X,N,SX), haseq(SX).

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы