Перевести программу на SWI Prolog

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

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

добрый вечер, помогите перевести программу на SWI - Prolog
я понимаю что в swi не нужно обьявление domains так что вот начал переделку

Решение задачи: «Перевести программу на SWI Prolog»

textual
Листинг программы
цикл(Конец,Конец,Цикл,Цикл,Длина).
цикл(Начало,Конец,Цикл0,Цикл,Длина):-связь(Начало,Промежут),
                                            not(принадлеж(Промежут,Цикл0,Конец)),
                                            цикл(Промежут,Конец,[Промежут|Цикл0],Цикл,Длина).
 
другой_больше(Длина):-связь(Вершина,_),цикл(Вершина,Вершина,[Вершина],_,Длина1),Длина1>Длина.
 
принадлеж(Вершина,_,Вершина):-!,fail.
принадлеж(Вершина,[Вершина|_],_):-!.
принадлеж(Вершина,[_|Цикл],Конец):-принадлеж(Вершина,Цикл,Конец).

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

В этом коде есть четыре правила:

  1. Цикл(Конец,Конец,Цикл,Цикл,Длина) - это базовый случай для цикла, когда начальное и конечное значения совпадают, и у цикла нет разделения.
  2. Цикл(Начало,Конец,Цикл0,Цикл,Длина) - это рекурсивный случай для цикла, когда начальное и конечное значения не совпадают, и есть промежуточное значение, которое не принадлежит циклу.
  3. Другой_больше(Длина) - это правило, которое проверяет, есть ли другой цикл, который больше текущего.
  4. Принадлеж(Вершина,_,Вершина) - это правило, которое говорит, что вершина принадлежит циклу, если она является начальной вершиной и конечной вершиной.
  5. Принадлеж(Вершина,[Вершина|],)- это правило, которое говорит, что вершина принадлежит циклу, если она является начальной вершиной и последним элементом.
  6. Принадлеж(Вершина,[_|Цикл],Конец)- это правило, которое рекурсивно проверяет, принадлежит ли вершина циклу.

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

7   голосов , оценка 4.429 из 5