Происходит очистка списков при рекурсии - Prolog
Формулировка задачи:
Очевидно, где-то "накосячил". Result выводиться пустым списком, хотя значения при выполнении предиката parser2 (writeln(H)) выводятся. После выполнения parser2 третий и седьмой список пустые (результат и вспомогательный список).
Рекурсивный предикат parser вызывает рекурсивный предикат parser2. При этом каждый раз ряд переменных очищается.
То есть внутри рекурсии предиката parser2 всё работает, а внутри рекурсии parser нет.
Листинг программы
- requirement(_,[]).
- requirement(X,Y):- parser0(X,Y,[]).
- parser0(X,Y,Result):- parser(X,Y,Result,[],_,[]), write(Result).
- parser(_,[],_,_,_,_).
- parser(X,[H|T],Z,Q, Index,PinNumbers):- (member(H,Q), NewIndex is Index+1; NewIndex is 0),
- list(X, PinList),
- parser2(X,H,Z,Q,NewIndex,PinList,PinNumbers),
- parser(X,T,Z,[H|Q], NewIndex,PinNumbers).
- parser2(_,_,_,_,_,[],_).
- parser2(X,Y,Z,Q,Index,[H|T],PinNumbers):-
- [Y/Index/N/P]=[H],
- % [Y/Index/N/P]=[uart_bus/0/proc_txd/e15]
- not(member(N,Q)),
- not(member(P,PinNumbers)),
- writeln(H),
- parser2(X,Y,[N|Z],[N|Q],Index,T,[P|PinNumbers]).
- parser2(X,Y,Z,Q,Index,[_|T],PinNumbers):- parser2(X,Y,Z,Q,Index,T,PinNumbers).
Решение задачи: «Происходит очистка списков при рекурсии»
textual
Листинг программы
- list(stm32f407,[uart_bus/0/proc_txd/e15,uart_bus/0/proc_txd/b6,uart_bus/0/proc_rxd/d15,uart_bus/0/proc_rxd/b5,uart_bus/0/proc_rts/b15,uart_bus/0/proc_cts/c15,uart_bus/1/proc_txd/p2]).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д