Происходит очистка списков при рекурсии - Prolog

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

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

Очевидно, где-то "накосячил". Result выводиться пустым списком, хотя значения при выполнении предиката parser2 (writeln(H)) выводятся. После выполнения parser2 третий и седьмой список пустые (результат и вспомогательный список). Рекурсивный предикат parser вызывает рекурсивный предикат parser2. При этом каждый раз ряд переменных очищается. То есть внутри рекурсии предиката parser2 всё работает, а внутри рекурсии parser нет.
Листинг программы
  1. requirement(_,[]).
  2. requirement(X,Y):- parser0(X,Y,[]).
  3. parser0(X,Y,Result):- parser(X,Y,Result,[],_,[]), write(Result).
  4. parser(_,[],_,_,_,_).
  5. parser(X,[H|T],Z,Q, Index,PinNumbers):- (member(H,Q), NewIndex is Index+1; NewIndex is 0),
  6. list(X, PinList),
  7. parser2(X,H,Z,Q,NewIndex,PinList,PinNumbers),
  8. parser(X,T,Z,[H|Q], NewIndex,PinNumbers).
  9. parser2(_,_,_,_,_,[],_).
  10. parser2(X,Y,Z,Q,Index,[H|T],PinNumbers):-
  11. [Y/Index/N/P]=[H],
  12. % [Y/Index/N/P]=[uart_bus/0/proc_txd/e15]
  13. not(member(N,Q)),
  14. not(member(P,PinNumbers)),
  15. writeln(H),
  16. parser2(X,Y,[N|Z],[N|Q],Index,T,[P|PinNumbers]).
  17. parser2(X,Y,Z,Q,Index,[_|T],PinNumbers):- parser2(X,Y,Z,Q,Index,T,PinNumbers).

Решение задачи: «Происходит очистка списков при рекурсии»

textual
Листинг программы
  1. 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]).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы