Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Не получается вернуть значение


Автор: dimichn 4.1.2010, 21:52
Задача: найти список изолированых вершин.
Наработки:
Код

get_isol([X|T],V,R):-
         write(X),nl,write(V),nl,write(R),nl,
         member(X,V),!,select(X,V,R1),get_isol(T,R1,R2), R is R2.
select(X,[X|T],T).
select(X,[H|T],[H|T1]):-
         select(X,T,T1).

Выполняется:
Цитата

JIP:-get_isol([b, g, f, c, e, d],[a, b, c, d, e, f, g, h],R).
b
[a, b, c, d, e, f, g, h]
_7733139
g
[a, c, d, e, f, g, h]
_7733139
f
[a, c, d, e, f, h]
_7733139
c
[a, c, d, e, h]
_7733139
e
[a, d, e, h]
_7733139
d
[a, d, h]
_7733139
No

Как заставить работать правильно? Может можно как-то по другому?

Автор: dimichn 5.1.2010, 03:11
Силами поиска решение такое получилось:
Код

edges([b-g,b-c,b-e,g-f,f-c,e-d]).
vertecies([a,b,c,d,e,f,g,h]).
s([h,a,f,g,w,n,s,a,j,d,m,d,e,h]).
%********************Works

%extracting vertecies witout dublicats
extract_vert([],[]).
vertex(G,L):-
         extract_vert(G,L1),
         remove1(L1,L).
extract_vert([X-Y|T],[X,Y|T1]):-
         extract_vert(T,T1).

%removing dublicats
remove1([], []).
remove1([A|L], Res):- 
         member(A, L), 
         !, 
         remove1(L, Res).
remove1([A|L], [A|Res]):- 
         remove1(L, Res).


%getting isolated vertecies
diff([],_,[]).
diff([X|M1],M2,[X|M]):- 
         not(member(X,M2)),
         !,
         diff(M1,M2,M).
diff([_|M1],M2,M):-
         diff(M1,M2,M).
%/*********
get_solution(G,R):-
         vertex(G,L),vertecies(V),diff(V,L,R).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)