To jest stara wersja strony!
API
Wersja 1 - płaska struktura
delete(A, [A|B], B).
delete(B, [A|C], [A|D]) :-
delete(B, C, D).
add(A, B, [A|B]).
make_node(Name,List) :-
add(element(Name, [], []), [], List),
X=..List,
assert(X),
write(List).
make_node(Name, Attr, Cont, List) :-
add(element(Name, Attr, Cont), [], List),
X=..List,
assert(X),
write(List).
add_child(Parent,Child,Nlist):-
element(Parent,A,C),
retract(element(Parent,A,C)),
add(element(Child,[],[]),C,L),
make_node(Parent,A,L,Nlist).
add_child(Parent,Child,Ch_att,Ch_cont,Nlist):-
element(Parent,A,C),
retract(element(Parent,A,C)),
add(element(Child,Ch_att,Ch_cont),C,L),
make_node(Parent,A,L,Nlist).
make_list(List) :-
bagof(A,element(A,B,C),A),
L=..A,
add(element(L,B,C),[],List),
write(List).
save :-
tell('wiedza.pl'),
listing(element),
told.
prolog2xml(List,File):-
tell(File),
open(File,write,S),
xml_write(S,List,[]),
told,
close(S).
----------------------------------
add_child(Parent,Child,Nlist):-
element(Parent,A,C),
element(Child,Chatt,Chcont),
retract(element(Parent,A,C)),
retract(element(Child,Chatt,Chcont)),
add(element(Child,Chatt,Chcont),C,L),
make_node(Parent,A,L,Nlist).
add_child(Parent,A,Child,Chatt,Nlist):-
element(Parent,A,C),
element(Child,Chatt,Chcont),
retract(element(Parent,A,C)),
retract(element(Child,Chatt,Chcont)),
add(element(Child,Chatt,Chcont),C,L),
make_node(Parent,A,L,Nlist).
Wersja 2
add(A, B, [A|B]).
add2end(X,[H|T],[H|NewT]):-add2end(X,T,NewT).
add2end(X,[],[X]).
append([], A, A).
append([A|B], C, [A|D]) :-
append(B, C, D).
belongs(X,[X|_]).
belongs(X,[_|Yogon]) :-
belongs(X,Yogon).
last(E,L) :-
append(_,[_,E],L).
first(E,L) :-
append([],[E|_],L).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
create_root(Name):-
assert(element(Name,[],[])),
write(element(Name,[],[])).
app_child(Parent, Child):-
search(Parent,A,L,1),
add2end(element(Child,[],[]),L,L1),
retract(element(Parent,A,L)),
assert(element(Parent,A,L1)),
retract(wezel(element(Parent,A,L),Z,P)),
assert(wezel(element(Parent,A,L1),Z,P)),
retractall(element(_,_,_)).
search(N,LA,LN,_):-
element(N,LA,LN),!.
search(N,LA,LN,P1):-
element(X,X1,L),
X\=N,
member2(element(_,_,_),L,element(X,X1,[]),P1,P2),!,
Pn is P2,
assert(liczba(Pn)),
retract(element(X,X1,L)),
assert(element(X,X1,[])),
search(N,LA,LN,Pn).
member1(D,L,O):-
belongs(D,L),
assert(D),
assert(wezel(D,O)),
fail;true.
member2(D,L,O,P,P3):-
L\=[],
P > 0,
belongs(D,L),
assert(D),
assert(wezel(D,O,P)),
P2 is P + 1,
usun(D,L,Ln),
( Ln ==[]
-> P3 is P2,true
; first(E,Ln),
member2(E,Ln,O,P2,P3)
).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
make_list(List) :-
bagof(A,element(A,B,C),A),
L=..A,
add(element(L,B,C),[],List).
zapisz :-
tell('wiedza.pl'),
listing(element),
told.
prolog2xml(List,File):-
tell(File),
open(File,write,S),
xml_write(S,List,[]),
told,
close(S).