Проверить эквивалентность двух списков - Prolog

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

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

Здравствуйте! У меня изначально был написан такой алгоритм:
И все работало нормально. Но после встраивания в программу меню и добавления предиката для ввода списка, все как-то начало падать при вводе разных список. В чем проблема?
Ошибка исправлена, помощь больше не требуется

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

textual
Листинг программы
domains
int=integer
intl=int*
 
predicates
equal(intl,intl)
 
clauses
equal([],[]).
equal([_],[]) :- fail.
equal([],[_]) :- fail.
equal([X|T1],[X|T2]) :- equal(T1,T2).
equal([X|_],[Y|_]) :- X<>Y, fail.

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

  1. domains - определение типов данных для переменных. В данном случае, int это целочисленный тип данных, а intl это указатель на массив целочисленных значений.
  2. predicates - определение пользовательских предикатов. В данном случае, equal это предикат, который проверяет эквивалентность двух списков.
  3. clauses - определение правил (условий) для предиката equal. Первое правило говорит, что если оба списка пустые, то они эквивалентны. Второе и третье правила указывают на неравенство, если списки не пустые и если первый список пустой, а второй не пустой и наоборот. Четвертое правило говорит, что если первые элементы списков не равны, то списки не эквивалентны.
  4. equal([],[]). - первое правило в clauses, которое говорит, что если оба списка пустые, то они эквивалентны.
  5. equal([_],[]) :- fail. - второе правило в clauses, которое указывает на неравенство, если первый список не пустой.
  6. equal([],[_]) :- fail. - третье правило в clauses, которое указывает на неравенство, если второй список не пустой.
  7. equal([X|T1],[X|T2]) :- equal(T1,T2). - четвертое правило в clauses, которое рекурсивно вызывает предикат equal для оставшейся части списков.
  8. equal([X|_],[Y|_]) :- X<>Y, fail. - пятое правило в clauses, которое указывает на неравенство, если первые элементы списков не равны.

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


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

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

11   голосов , оценка 3.818 из 5
Похожие ответы