Возврат правильного списка - Prolog

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

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

есть код
Листинг программы
  1. %читаю типы
  2. список_типов([H|T]):-
  3. readln(H),!,
  4. список_типов(T).
  5. список_типов([]).
  6. не_стандартный_тип(H):-
  7. H<>"symbol",
  8. H<>"char",
  9. H<>"string",
  10. H<>"real",
  11. H<>"integer".
  12. %главный предикат обработки
  13. правильный_список_типов(Список):-
  14. список_типов(Список),
  15. проверка_списка(Список),write(Список).
  16. %рекурсивно проверяю, чтоб в списке не было ни одного не стандартного типа
  17. проверка_списка([H|T]):-
  18. not(не_стандартный_тип(H)),
  19. проверка_списка(T).
  20. проверка_списка([]).
  21. проверка_списка(Список):-
  22. bound(Список),
  23. write("Найден нестандартный тип, повторите ввод аргументов!\n"),
  24. правильный_список_типов(_).
этот кусок обрабатывает ввод с клавиатуры типов пролога, сохранение в список, и проверку, чтоб в списке не было нестандастных типов. потом правильный список должен вернуться обратно в программу, но возвращается тот список, которым я вводил первым. ВОПРОС, не подскажите, как сделать так, чтоб возвращался последний введенный мной список?
по сути проблема в том, что после того, как я наконец то введу правильный список, программа рекурсивно откатиться к самому первому, и проблема только в том, как правильно вставить предикат отсечения.

Решение задачи: «Возврат правильного списка»

textual
Листинг программы
  1.         список_типов([H|T]):-
  2.         readln(H),!,
  3.         список_типов(T).
  4.        
  5.     список_типов([]).
  6.        
  7.     не_стандартный_тип(H):-
  8.         H<>"symbol",
  9.         H<>"char",
  10.         H<>"string",
  11.         H<>"real",
  12.         H<>"integer",write("проверили типы"),nl.
  13.  
  14.     %главный предикат обработки
  15.     правильный_список_типов(Список):-
  16.         список_типов(Список),write("после списка типов"),nl,
  17.         проверка_списка(Список),write(Список).
  18.    
  19.     %рекурсивно проверяю, чтоб в списке не было ни одного не стандартного типа
  20.     проверка_списка([H|T]):-
  21.         not(не_стандартный_тип(H)),write("в проверка"),nl,
  22.         проверка_списка(T),write("после проверка типа"),nl.
  23.        
  24.     проверка_списка([]):-write("конец списка"),nl.
  25.    
  26.     проверка_списка(Список):-
  27.         bound(Список),
  28.         write("Найден нестандартный тип, повторите ввод аргументов!\n"),
  29.         правильный_список_типов(_),write("неправильный тип"),nl.

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


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

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

6   голосов , оценка 3.5 из 5

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

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

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