Удаление конца списка после заданного элемента - Prolog

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

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

Помогите мне пожалуйста. Следующий код удаляет конец списка с заданным элементом, как можно удалить конец списка после заданного элемента?
Листинг программы
  1. DOMAINS
  2. list_string = string*
  3. number_list = integer*
  4. PREDICATES
  5. nondeterm result
  6. checking(integer,number_list)
  7. nondeterm del_end_list(integer,number_list,number_list)
  8. nondeterm read_numlist(number_list)
  9. CLAUSES
  10. read_numlist([H|T]):-
  11. readInt(H),
  12. H <> 0,
  13. read_numlist(T).
  14. read_numlist([]).
  15. checking(X,[]):-
  16. write("Element ",X," In the list does not exist"),nl,
  17. write("Re-enter the element"),nl, nl,
  18. fail.
  19. checking(X,[X|_]):-!.
  20. checking(X,[_|T]):-checking(X,T).
  21. del_end_list(X,[X|_],[]).
  22. del_end_list(X,[H|T],[H|T1]):-del_end_list(X,T,T1).
  23. result:-
  24. write(" 1. Delete the end of the list after the specified item."), nl,
  25. write(" Enter the list: "), nl,
  26. read_numlist(List1),
  27. write(" Enter the element: "),
  28. readint(X),
  29. checking(X,List1),
  30. del_end_list(X,List1,List2),
  31. write(" List after deletion: "),
  32. write(List2), nl,
  33. readchar(_),!.
  34. GOAL
  35. result.

Решение задачи: «Удаление конца списка после заданного элемента»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. cut(intl,int,intl)
  7.  
  8. clauses
  9. cut([],_,[]).
  10. cut([H|_],H,[H]).
  11. cut([X|T],H,[X|R]) :- X<>H, cut(T,H,R).

Объяснение кода листинга программы

  1. Задача: удаление конца списка после заданного элемента.
  2. Используемый язык программирования: Prolog.
  3. В коде определены следующие типы данных:
    • int - целочисленный тип данных.
    • intl - указатель на целочисленный тип данных.
  4. Определены следующие предикаты:
    • cut - предикат, который выполняет удаление конца списка после заданного элемента.
  5. В коде присутствуют следующие утверждения (ограничивающие правила):
    • cut([],_,[]). - если список пустой, то список остается пустым.
    • cut([H|_],H,[H]). - если в списке присутствует только один элемент, то этот элемент возвращается в итоговом списке.
    • cut([X|T],H,[X|R]) :- X<>H, cut(T,H,R). - если в списке есть несколько элементов, то код рекурсивно вызывает себя для обработки списка без текущего элемента и добавляет текущий элемент в итоговый список.
  6. Код работает следующим образом:
    • Входные данные: список, элемент, который нужно удалить, итоговый список.
    • Рекурсивный вызов функции cut для обработки списка без текущего элемента и добавления текущего элемента в итоговый список.
    • Если список пустой, то список остается пустым.
    • Если в списке присутствует только один элемент, то этот элемент возвращается в итоговом списке.
    • Если в списке есть несколько элементов, то рекурсивный вызов функции cut продолжается до тех пор, пока не будет достигнут список, у которого пустой или содержит только один элемент.
    • Итоговый список формируется путем добавления текущего элемента в список, полученный после рекурсивного вызова функции cut.
  7. Преимущества данного подхода:
    • Рекурсивный подход позволяет обрабатывать списки любой длины.
    • Алгоритм имеет линейную сложность, что делает его эффективным для работы с большими списками.
    • Код занимает небольшое количество строк, что делает его компактным и легко читаемым.

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


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

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

13   голосов , оценка 3.769 из 5

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

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

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