Хм... Что ты тут натворил?
Смотри, что ты делаешь:
1) описываешь предикат
prinad(R, RMas), то есть проверка на существование ребра в графе
2) и тут же:
Код
path1(A,[Y|P1],VM,RM,P):-
smezh(X,Y,VM,RM),
prinad(X,P1),
path1(A,[X,Y|P1],VM,RM,P).
- вызываешь его как
prinad(integer, integer*) ? Нельзя... Сделай отдельно проверку существования вершины в списке...
В общем, вот это:
Код
domains
VMas=integer*
R=rebro(integer,integer)
RMas=R*
predicates
inlist(integer, VMas)
path(integer,integer,VMas,RMas,VMas)
path1(integer,VMas,VMas,RMas,VMas)
smezh(integer,integer,VMas,RMas)
prinad(R, RMas)
clauses
% проверка вхождения ребра в список ребер
prinad(X, [X|_]).
prinad(X, [_|L]):-prinad(X, L).
% проверка вхождения номера вершины (integer) в список целых
inlist(X, [X|_]).
inlist(X, [_|L]):-inlist(X, L).
path(A,Z,VM,RM,P):-
path1(A,[Z],VM,RM,P).
path1(A,[A|P1],_,_,[A|P1]).
path1(A,[Y|P1],VM,RM,P):-
smezh(X,Y,VM,RM),
inlist(X,P1),
path1(A,[X,Y|P1],VM,RM,P).
smezh(X,Y,VM,RM):-
prinad(rebro(X,Y),RM);
prinad(rebro(Y,X),RM).
должно нормально компилироваться (Пролога у меня сейчас нет, проверить негде, но вроде бы ошибок не видно)