Ответ в теме: Косвенная рекурсия не работает

      Комментарии к записи Ответ в теме: Косвенная рекурсия не работает отключены
#2465

aleator
Участник

Что-то с порядком вывода сообщений…
Вот моё решение:

% *************************************************************

first([X|_],X).
% *************************************************************

writeL([]):-!.
    writeL([H|T]):-write(H),nl,writeL(T).
% *************************************************************

requirement(X,Y):- list(X, PinList), my_parser(Y,PinList,PinList,[],0,[],[],[]).

my_parser([],_,_,Result,_,_,_,_):- writeL(Result).

my_parser([_|T],[],PinList,Result,Index,BusPropertysList,PinNumbersList,_):- 
	(first(T,X), 
	member(X,BusPropertysList), NewIndex is Index+1; NewIndex is 0),	
	my_parser(T,PinList,PinList,Result,NewIndex,BusPropertysList,PinNumbersList,[]).

my_parser([H|T1],[H/Index/N/P|T2],PinList,Result,Index,BusPropertysList,PinNumbersList,List):-
	not(member(N,List)),
	not(member(P,PinNumbersList)),
	my_parser([H|T1],T2,PinList,[H/Index/N/P|Result],Index,[H|BusPropertysList],[P|PinNumbersList], [N|List]).

my_parser([H1|T1],[_/_/_/_|T2],PinList,Result,Index,BusPropertysList,PinNumbersList, List):- 
	my_parser([H1|T1],T2,PinList,Result,Index,BusPropertysList,PinNumbersList, List).

% *************************************************************

1. Насчёт не понятности задания — Вы правы. Объяснил плохо.
2. Насчёт «пришлось» — в начале, решение в виде косвенной рекурсии мне казалось более понятным (если не единственным).