
%%%% Nogle mulige løsninger på opgave 2, sommer 2006:

%merges([X|L1],[Y|L2],[X|L3]) :- merges(L1,[Y|L2],L3).
%merges([X|L1],[Y|L2],[Y|L3]) :- merges([X|L1],L2,L3).
%merges([],[Y|L2],[Y|L2]).
%merges(L1,[],L1).

%%%% Bedre:
merges([],[],[]).
merges([A|L1],L2,[A|L3]) :- merges(L1,L2,L3).
merges(L1,[B|L2],[B|L3]) :- merges(L1,L2,L3).


buzz :- buzzmain(1).
buzzmain(K) :- 0 =:= K mod 3, write(' '), write(buzz), K1 is K+1, buzzmain(K1).
buzzmain(K) :- 0 =:= K mod 7, write(' '), write(buzz), K1 is K+1, buzzmain(K1).
buzzmain(K) :- write(' '), write(K), K1 is K+1, buzzmain(K1).


%% Below, cut ensures only one success.
%% Solution relies on the order of the clauses.

bum(D,N,L) :- bummain(1,D,N,L),!.
bummain(K,_,N,[]) :- K =:= N+1.
bummain(K,D,N,[bum|Rest]) :- 0 =:= K mod D,
                             K1 is K+1, bummain(K1,D,N,Rest).
bummain(K,D,N,[bum|Rest]) :- number_chars(K,L),
                             number_chars(D,[DChar]),
                             member(DChar,L),
                             K1 is K+1, bummain(K1,D,N,Rest).
bummain(K,D,N,[K|Rest]) :- K1 is K+1, bummain(K1,D,N,Rest).


%% Note: buzzmain (bummain) kunne ogsaa bare hedde buzz (bum)
%% (da ariteten skiller dem ad).


%%%% Til opgave 3, sommer 2006:

t(X,Y):- s(X),!,v(Y),s(X).
s(1).
s(2).
v(a).
v(b):- !.
v(c).
