163
remove(X,[X|M],R):-!,remove(X,M,R).
remove(X,[Y|L1],[Y|L2]):-remove(X,L1,L2).
reverse([],[]).
reverse([H|T],B):-
reverse(T,S),
append(S,[H],B).
member(X,[X|Y]).
member(X,[Y|L]):-member(X,L).
permutation(X,[H|T]):-
append(V,[H|U],X),
append(V,U,W),
permutation(W,T).
permutation([],[]).
permutation_dropping(S,Result):-
subset(S,SSub),
permutation(SSub,Result).
subset([],[]).
subset([Item|Items],[Item|Subset]):-
subset(Items,Subset).
subset([Item|Items],Subset):-
subset(Items,Subset).
AppendixB :VTMLGrammar
%terminal{
SPECIAL_CHAR:CharacterTokenDATA:DataTokenSTRING:StringToken
USER_KEYWORD:StringTokenINTEGER:IntegerToken
#Operationkeywords
VTMLATTLISTINSDELEXTINSEXTDELUSROP
ADELADELEND
#Setsofattributenames:
POSLENITEMSATTINCLUDESEXCLUDES
OWNERTIMESTAMPCOMMENTBASE%}
#We'vegot,basically,externalchangesandinternalchanges.AUSROP
#canbeboth,intheory.Werequireexternalchangesfirst,
#speciallydelimited.
doc::='('header')'
(%epsilon%|
('('ins_contents')'('('ins_contents')')*));
header ::=VTMLSTRING:id
(doc_att:att'='STRING:value)*')'external*;
internal ::= '('tag_contents;
tag_contents ::=ins_contents')'
|del_contents')'
|adel_contents')'
|adelend_contents')';
ins_contents ::=INSSTRING:idchange_attlist')'element+;
del_contents ::=DELSTRING:idchange_attlist')'element+;
adel_contents ::=ADELSTRING:idchange_attlist')';
adelend_contents ::=ADELENDSTRING:id')';
element ::=(data|internal);
data ::= DATA:data
change_attlist ::=(change_att:att'='STRING:value)*;
Previous Page Next Page