Реализовать разделение списка на два - Prolog

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

Определите отношение divideList(+List, –List1, –List2) таким образом, чтобы элементы списка List попеременно распределялись между списками List1 и List2, причем List1 и List2 имели примерно одинаковую длину, например divideList([a,b,c,d,e],[a,c,e],[b,d]) – истина.

Код к задаче: «Реализовать разделение списка на два - Prolog»

textual
domains
sym=symbol
syml=sym*
 
predicates
zip(syml,syml,syml)      %% объединение
divlist(syml,syml,syml)  %% разделение
 
clauses
zip(S,S,[]).
zip(S,[],S).
zip([A,B|R],[A|T],[B|Q]) :- zip(R,T,Q).
 
divlist([],[],[]).
divlist([A],[A],[]).
divlist([A,B|R],[A|T],[B|Q]) :- divlist(R,T,Q).
 
 
goal
divlist([a,b,c,d,e,f],A,B),write(A),nl,write(B),nl.

10   голосов, оценка 3.900 из 5


СОХРАНИТЬ ССЫЛКУ