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

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

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

добрый вечер, помогите перевести программу на SWI - Prolog
Листинг программы
  1. domains
  2. IntList = Integer*
  3. facts - граф
  4. связь(Integer,Integer,Real)
  5. predicates
  6. nondeterm цикл(Integer,Integer,IntList,IntList,Real,Real)
  7. принадлеж(Integer,IntList,Integer)
  8. nondeterm другой_больше(Real)
  9. goal
  10. связь(Вершина,_,_),
  11. цикл(Вершина,Вершина,[Вершина],Цикл,0.0,Длина),
  12. not(другой_больше(Длина)).
  13. clauses
  14. цикл(Конец,Конец,Цикл,Цикл,Длина,Длина).
  15. цикл(Начало,Конец,Цикл0,Цикл,Длина0,Длина):-
  16. связь(Начало,Промежут,Длина1),
  17. not(принадлеж(Промежут,Цикл0,Конец)),
  18. Длина2 = Длина0 + Длина1,
  19. цикл(Промежут,Конец,[Промежут|Цикл0],Цикл,Длина2,Длина).
  20. другой_больше(Длина):-
  21. связь(Вершина,_,_),
  22. цикл(Вершина,Вершина,[Вершина],_,0.0,Длина1),Длина1>Длина.
  23. принадлеж(Вершина,_,Вершина):-!,fail.
  24. принадлеж(Вершина,[Вершина|_],_):-!.
  25. принадлеж(Вершина,[_|Цикл],Конец):-принадлеж(Вершина,Цикл,Конец).
  26. связь(1,2,2.7). связь(1,4,4.3). связь(2,3,5.6). связь(3,4,6.8).
  27. связь(4,5,16.3). связь(5,6,10.9). связь(6,1,1.0). связь(2,9,23.2).
  28. связь(9,8,1.4). связь(8,7,10.1). связь(7,6,1.9). связь(7,5,10.4).
я понимаю что в swi не нужно обьявление domains так что вот начал переделку
Листинг программы
  1. goal:-связь(Вершина,_,_),цикл(Вершина,Вершина,[Вершина],Цикл,0.0,Длина),not(другой_больше(Длина)).
  2. цикл(Конец,Конец,Цикл,Цикл,Длина,Длина).
  3. цикл(Начало,Конец,Цикл0,Цикл,Длина0,Длина):-связь(Начало,Промежут,Длина1),
  4. not(принадлеж(Промежут,Цикл0,Конец)),
  5. Длина2 is Длина0 + Длина1,
  6. цикл(Промежут,Конец,[Промежут|Цикл0],Цикл,Длина2,Длина).
  7. другой_больше(Длина):-связь(Вершина,_,_),цикл(Вершина,Вершина,[Вершина],_,0.0,Длина1),Длина1>Длина.
  8. принадлеж(Вершина,_,Вершина):-!,fail.
  9. принадлеж(Вершина,[Вершина|_],_):-!.
  10. принадлеж(Вершина,[_|Цикл],Конец):-принадлеж(Вершина,Цикл,Конец).
  11. связь(1,2,2.7). связь(1,4,4.3). связь(2,3,5.6). связь(3,4,6.8).
  12. связь(4,5,16.3). связь(5,6,10.9). связь(6,1,1.0). связь(2,9,23.2).
  13. связь(9,8,1.4). связь(8,7,10.1). связь(7,6,1.9). связь(7,5,10.4).

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

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

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

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

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

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


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

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

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

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

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

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