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

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

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

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

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

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


СОХРАНИТЬ ССЫЛКУ