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).
 
remove(A, [A|B], B).
remove(B, [A|C], [A|D]) :-
        remove(B, C, D).
 
belongs(X,[X|_]).
belongs(X,[_|Yogon]) :-
	belongs(X,Yogon).
 
last(E,L) :-
	append(_,[_,E],L).
first(E,L) :-
	append([],[E|_],L).
 
max([], A, A).
 
max([H|T], A, M) :- 
	H > A, 
	max(T, H, M).
 
max([H|T], A, M) :- 
	H =< A, 
	max(T, A, M). 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
create_root(Name):-
	assert(element(Name,[],[])),
	write(element(Name,[],[])).
 
app_child(Parent, Child):-
	assert(bylem(0)),
	search(Parent,A,L,1),
	add2end(element(Child,[],[]),L,L1),
	retract(element(Parent,A,L)),
	assert(element(Parent,A,L1)),
	bylem(Q),
	( Q==1
	-> retract(wezel(element(Parent,A,L),Z,P)),
	   assert(wezel(element(Parent,A,L1),Z,P)),
	   retractall(element(_,_,_)),
	   maxo(I),
	   build1(I),
	   retractall(wezel(_,_,_)),
	   retractall(bylem(_))
	;  true
	).
 
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,
	retract(element(X,X1,L)),
	assert(element(X,X1,[])),
	search(N,LA,LN,Pn).
 
maxo(X):-
	findall(X,wezel(_,_,X),L),
	max(L,0,X).
 
build(0):-!.	
build(L):-
	wezel(element(A,B,C),element(A1,B1,C1),L),
	element(W,W1,W2),
	( W == A
	-> 
	   add(element(W,W1,W2),C1,NL),
	   assert(element(A1,B1,NL)),
	   retract(element(W,W1,W2)),
	   Ln is L-1,
	   build(Ln) 
	;  
		( W == A1
	   	->   add(element(A,B,C),W2,New),
		     assert(element(W,W1,New)),
	   	     retract(element(W,W1,W2)),
	   	     Ln is L-1,
	           build(Ln)
		; 
		     add(element(A,B,C),C1,New),
		     assert(element(A1,B1,New)),
	   	     retract(element(W,W1,W2)),
	   	     Ln is L-1,
	           build(Ln)
		)
	).  
build1(X):-
	assert(element(*,[],[])),
	build(X).
 
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,
	remove(D,L,Ln),
	retractall(bylem(_)),
	assert(bylem(1)),
	( 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).
 
prolog2xml(File):-
	make_list(List),
	tell(File),
	open(File,write,S),
	xml_write(S,List,[]),
	told,
	close(S).
pl/miw/miw08_prolog_xml/prolog_api.1211215916.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0