1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2%% %% 3%% Version: 1.00 Date: 14/07/96 File: base.pl 4%% Last Version: File: %% 5%% Changes: %% 6%% 25/03/96 Created %% 7%% 14/07/96 removed configuration utilities (-> defaults.pl) 8%% %% 9%% Purpose: %% 10%% %% 11%% Author: Torsten Schaub %% 12%% %% 13%% Usage: prolog base.pl %% 14%% %% 15%% %% 16%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17 18%%% ---------------------------------------------------------------------- 19%%% 20%%% additional predicates 21%%% 22%%% 23 24apply_to_list([],_,[]). 25apply_to_list([Elem|List],P,[Elem1|List1]) :- 26 T =.. [P,Elem,Elem1], 27 call(T), 28 apply_to_list(List,P,List1). 29 30 31apply_to_list_flat([],_,[]). 32apply_to_list_flat([Elem|List],P,ResList) :- 33 T =.. [P,Elem,Result1], 34 call(T), 35 apply_to_list(List,P,List1), 36 append(Result1,List1,ResList). 37 38 39%%% mymember(?Element, ?Set) 40%%% is true when Set is a list, and Element occurs in it. It may be used 41%%% to test for an element or to enumerate all the elements by backtracking. 42%%% Indeed, it may be used to generate the Set! 43 44mymember(X, [X|_] ). 45mymember(X, [_,X|_] ). 46mymember(X, [_,_,X|_]). 47mymember(X, [_,_,_|L]) :- 48 mymember(X, L). 49 50%%% myselect(?Element, ?Set, ?Residue) 51%%% is true when Set is a list, Element occurs in Set, and Residue is 52%%% everything in Set except Element (things stay in the same order). 53 54myselect(X, [X|R], R ). 55myselect(X, [A,X|R], [A|R] ). 56myselect(X, [A,B,X|R], [A,B|R] ). 57myselect(X, [A,B,C|L], [A,B,C|R]) :- 58 myselect(X, L, R). 59 60%%% mysubset(+Set1, +Set2) 61%%% is true when each member of Set1 occurs in Set2. 62%%% 63 64mysubset([],_). 65mysubset([X|R],L) :- 66 mymember(X,L), 67 mysubset(R,L). 68 69 70concatenate(String1,String2,String) :- 71 name(String1,L1), 72 name(String2,L2), 73 append(L1,L2,L), 74 name(String,L), 75 !