Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_prolog_xml:prolog_api [2008/05/19 18:50]
miw
pl:miw:miw08_prolog_xml:prolog_api [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ===== API ===== ===== API =====
  
-==== Wersja 1 - płaska struktura ==== +Plik API do pobrania tutaj: 
-<code prolog>​ +{{:​pl:​miw:​miw08_prolog_xml:​xml_api.pl|plik xml_api.pl}}
-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) :- +===== Wersja główna =====
-        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). 
-</​code>​ 
- 
- 
- 
- 
-==== Wersja 2 ==== 
  
 +==== Predykaty pomocnicze ====
 <code prolog> <code prolog>
  
Linia 91: Linia 27:
         remove(B, C, D).         remove(B, C, D).
  
 +belongs(*,​[]).
 belongs(X,​[X|_]). belongs(X,​[X|_]).
 belongs(X,​[_|Yogon]) :- belongs(X,​[_|Yogon]) :-
  belongs(X,​Yogon).  belongs(X,​Yogon).
  
-last(E,L) :- +first(_,L):-  
- append(_,[_,E],L).+ L == [],!
 first(E,L) :- first(E,L) :-
 + L \= [],
  append([],​[E|_],​L).  append([],​[E|_],​L).
  
 max([], A, A). max([], A, A).
- 
 max([H|T], A, M) :-  max([H|T], A, M) :- 
  H > A,   H > A, 
  max(T, H, M).  max(T, H, M).
- 
 max([H|T], A, M) :-  max([H|T], A, M) :- 
  H =< A,   H =< A, 
  max(T, A, M).   max(T, A, M). 
  
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+</​code>​
  
-create_root(Name):​- 
- assert(element(Name,​[],​[])),​ 
- write(element(Name,​[],​[])). 
  
-app_child(Parent,​ Child):- +==== Predykaty związane z nadawaniem id ==== 
- search(Parent,A,L,1), +<code prolog>​ 
- add2end(element(Child,​[],[]),L,L1), + 
- retract(element(Parent,A,L)), +:- dynamic current_id/​2. 
- assert(element(Parent,A,L1)), + 
- retract(wezel(element(Parent,A,L),Z,P)), +current_id(*,0). 
- assert(wezel(element(Parent,A,L1),Z,P)), + 
- retractall(element(_,_,_)).+create_id(X,ID):- 
 + current_id(X,N), 
 + N1 is N + 1, 
 + retractall(current_id(X,_)), 
 + assert(current_id(X,N1)), 
 + string_concat(X,'​_'​,ID1), 
 + string_concat(ID1,N1,ID2), 
 + string_to_atom(ID2,ID).
   
-search(N,LA,LN,_):- +create_id(X,ID):- 
- element(N,LA,LN),!.+ assert(current_id(X,0)), 
 + string_concat(X,'​_',ID1), 
 + string_concat(ID1,0,ID2), 
 + string_to_atom(ID2,​ID).
  
-search(N,​LA,​LN,​P1):​-+</​code>​ 
 + 
 + 
 + 
 + 
 + 
 + 
 +==== Predykaty związane z przeszukiwaniem oraz budowaniem struktury prologowej xml ==== 
 +<code prolog>​ 
 + 
 +check_need_build(X,​_,​_,​_,​_,​_):​- 
 + X == 0,!.  
 + 
 +check_need_build(X,​P,​P1,​P2,​L,​W):​- 
 + X == 1, 
 + W == 1, 
 + retract(pair(element(P,​P1,​P2),​Z,​Z1)),​ 
 + assert(pair(element(P,​P1,​L),​Z,​Z1)),​ 
 + retractall(element(_,​_,​_)),​ 
 + maxo(I), 
 + build1(I),​ 
 + retractall(pair(_,​_,​_)),​ 
 + retractall(need_build(_)). 
 + 
 +check_need_build(X,​P,​P1,​P2,​L,​W):​- 
 + X == 1, 
 + W == 2, 
 + retract(pair(element(P,​P1,​L),​Z,​Z1)),​ 
 + assert(pair(element(P,​P2,​L),​Z,​Z1)),​ 
 + retractall(element(_,​_,​_)),​ 
 + maxo(I), 
 + build1(I),​ 
 + retractall(pair(_,​_,​_)),​ 
 + retractall(need_build(_)). 
 + 
 +search(N,​LA,​LN,​_,​P_id):​- 
 + element(N,​LA,​LN),​ 
 + %bagof(N,​element(N,​LA,​LN),​_),​ 
 + belongs(P_id,​LA). 
 + 
 +search(N,​LA,​LN,​P1,P_id):-
  element(X,​X1,​L),​  element(X,​X1,​L),​
  X\=N,  X\=N,
- member2(element(_,​_,​_),​L,​element(X,​X1,​[]),​P1,​P2),​!,​+ member3(element(_,​_,​_),​L,​element(X,​X1,​[]),​P1,​P2),​!,​
  Pn is P2,  Pn is P2,
- assert(liczba(Pn)),​ 
  retract(element(X,​X1,​L)),​  retract(element(X,​X1,​L)),​
  assert(element(X,​X1,​[])),​  assert(element(X,​X1,​[])),​
- search(N,​LA,​LN,​Pn).+ search(N,​LA,​LN,​Pn,P_id).
  
-member1(D,L,O):- +maxo(X):- 
- belongs(D,L), + findall(X,​pair(_,​_,​X),L), 
- assert(D), + max(L,0,X). 
- assert(wezel(D,O)), + 
- fail;true.+check_pair(X,​Y,​N,​L):- 
 + pair(_,element(X,​Y,​_),​Q),​ 
 + Q \= 1, 
 + retract(pair(element(X,​Y,​_),​element(R,​R1,​R2),​R4)),​ 
 + assert(pair(element(X,​Y,​N),​element(R,​R1,​R2),​R4)),​ 
 + Ln is L-1, 
 + build(Ln). 
 + 
 +check_pair(X,​Y,​_,​L):​- 
 + pair(_,​element(X,​Y,​_),​Q),​ 
 + Q == 1, 
 + Ln is L-1, 
 + build(Ln). 
 +  
 +check_id2(X,​Y,​A,​B,​C,​_,​_,​_,​W,​W1,​W2,​L):​- 
 + X == Y, 
 + add(element(A,​B,​C),​W2,​New), 
 + assert(element(W,​W1,​New)),​ 
 + retract(element(W,​W1,​W2)),​ 
 + check_pair(W,​W1,​New,​L). 
 +  
 +check_id2(X,​Y,​A,​B,​C,​A1,​B1,​C1,​W,​W1,​W2,​L):​- 
 + X \= Y, 
 + add(element(A,​B,​C),​C1,​New), 
 + assert(element(A1,B1,New)), 
 + retract(element(W,​W1,​W2)),​ 
 + check_pair(A1,​B1,​New,​L). 
 + 
 +check_id1(X,​Y,​_,​_,​_,​_,​A1,​B1,​C1,​W,​W1,​W2,​L):​- 
 + X == Y, 
 + add(element(W,​W1,​W2),​C1,​NL),​ 
 + assert(element(A1,​B1,​NL)),​ 
 + retract(element(W,​W1,​W2)),​ 
 + Ln is L-1, 
 + build(Ln). 
 + 
 +check_id1(X,​Y,​Z,​A,​B,​C,​A1,​B1,​C1,​W,​W1,​W2,​L):​- 
 + X \= Y, 
 + check_id2(X,​Z,​A,​B,​C,​A1,​B1,​C1,​W,​W1,​W2,​L). 
 + 
 +build(0):​-!.  
 +build(L):​- 
 + pair(element(A,​B,​C),​element(A1,​B1,​C1),​L),​ 
 + element(W,​W1,​W2),​ 
 + first(ID1,​W1),​ 
 + first(ID2,​B1),​ 
 + first(ID3,​B),​ 
 + check_id1(ID1,​ID3,​ID2,​A,​B,​C,​A1,​B1,​C1,​W,​W1,​W2,​L).
  
 +build1(X):-
 + assert(element(*,​[id=0],​[])),​
 + build(X).
  
-member2(D,​L,​O,​P,​P3):​-+member3(_,​L,​_,​P,​P3):​-L == [],P3 is P,!. 
 +member3(D,​L,​O,​P,​P3):​-
  L\=[],  L\=[],
- P > 0, 
  belongs(D,​L),​  belongs(D,​L),​
  assert(D),  assert(D),
- assert(wezel(D,O,P)),+ assert(pair(D,O,P)),
  P2 is P + 1,  P2 is P + 1,
  remove(D,​L,​Ln),​  remove(D,​L,​Ln),​
-Ln ==[] + retractall(need_build(_)),​ 
- -> P3 is P2,true + assert(need_build(1))
- first(E,​Ln),​ + first(E,​Ln),​ 
-   member2(E,​Ln,​O,​P2,​P3+ member3(E,​Ln,​O,​P2,​P3).
-  ).+
  
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+</​code>​ 
 + 
 + 
 + 
 + 
 +==== Predykaty główne ==== 
 +<code prolog>​ 
 + 
 +tworzenie korzenia dokumentu 
 +create_root(Name,​ID_name):​- 
 + create_id(ID_name,​ID),​ 
 + assert(element(Name,​[id=ID],​[])). 
 + 
 +dodawanie dzieci do wybranego rodzica o wybranym id 
 +app_child(Parent,​P_id,​Child,​ChildIdName):​- 
 + Parent\=Child,​ 
 + assert(need_build(0)),​ 
 + search(Parent,​A,​L,​1,​P_id),​ 
 + create_id(ChildIdName,​ID),​ 
 + add2end(element(Child,​[id=ID],​[]),​L,​L1),​ 
 + retract(element(Parent,​A,​L)),​ 
 + assert(element(Parent,​A,​L1)),​ 
 + need_build(Q),​ 
 + check_need_build(Q,​Parent,​A,​L,​L1,​1). 
 + 
 +dodawanie dzieci do wybranego rodzica o wybranym id - wersja z mozliwym  
 +okresleniem ilosci dodawanych dzieci 
 +app_child(_,​_,​_,​_,​0). 
 +app_child(Parent,​P_id,​Child,​ChildIdName,​How_much):​- 
 + How_much > 0, 
 + app_child(Parent,​P_id,​Child,​ChildIdName),​ 
 + New is How_much - 1, 
 + app_child(Parent,​P_id,​Child,​ChildIdName,​New).  
 + 
 +dodawanie atrybutu do elementu o zadanym id 
 +add_attribute(Parent,​P_id,​Attr):​- 
 + assert(need_build(0)),​ 
 + search(Parent,​AttL,​L,​1,​P_id),​ 
 + add2end(Attr,​AttL,​A1),​ 
 + retract(element(Parent,​AttL,​L)),​ 
 + assert(element(Parent,​A1,​L)),​ 
 + need_build(Q),​ 
 + check_need_build(Q,​Parent,​AttL,​A1,​L,​2). 
 + 
 +</​code>​ 
 + 
 + 
 + 
 + 
 + 
 +==== Predykaty do zapisu, tworzenia pliku xml ==== 
 +<code prolog>
  
 +% tworzenie listy potrzebnej do zapisu do pliku xml
 make_list(List) :- make_list(List) :-
  bagof(A,​element(A,​B,​C),​A),​  bagof(A,​element(A,​B,​C),​A),​
Linia 166: Linia 249:
  add(element(L,​B,​C),​[],​List).  add(element(L,​B,​C),​[],​List).
  
-zapisz :-+% zapisywanie bazy wiedzy - struktury xml oraz stanu id 
 +zapisz(File) :- 
 + tell(File),​ 
 + listing(element),​ 
 + listing(current_id),​ 
 + told. 
 + 
 +% tworzenie pliku xml 
 +prolog2xml(File):​- 
 + make_list(List),​ 
 + tell(File),​ 
 + open(File,​write,​S),​ 
 + xml_write(S,​List,​[]),​ 
 + told, 
 + close(S). 
 + 
 +</​code>​ 
 + 
 +===== Wersja poprzednia - płaska struktura ===== 
 +<code prolog>​ 
 +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'​),​  tell('​wiedza.pl'​),​
  listing(element),​  listing(element),​
Linia 178: Linia 318:
  close(S).  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).
 </​code>​ </​code>​
 +
 +
 +
 +
 +
pl/miw/miw08_prolog_xml/prolog_api.1211215811.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