:- consult(smallInt).

%%% QUESTO FILE CONTIENE LE SOLUZIONI DEGLI ESERCIZI
%   svolti in laboratorio, scritte nel linguaggio
%   didattico di smallInt
%   --->  per usare smallInt:
%         help.   stampa comandi disponibili
%         prove(Goal).   Risolve Goal e mostra l'albero di prova
% ---->  dopo aver caricato [append] usare, ad es., la query
%	 prove(app(2,[1,2,1],Res)
%        Provare in modo simile tutti e 3 i programmi.
%         
%

%%% app(Elem,Lista,Result):   Result = Lista a cui
%                             si appende Elem in fondo

base #  app(X,[],[X]) if true.
passo # app(X,[T|C],[T|AC]) if app(X,C,AC).

%%% ins(Elem,ListaOrd,Result):
%       precondizione: ListaOrd lista ordinata di integer
%		       e Elem costante integer
%       postcondizione:  Result = ordinamento(Elem unito ListaOrd)

base # ins(X,[],[X]) if true.
passo1 #  ins(X,[T|C],[X,T|C]) if (X < T).
passo2 #  ins(X,[T|C],[T|AC]) if (X >= T) & ins(X,C,AC).


%%  rev(Lista,Rev) :   Rev = reverse(Lista)

base # rev([],[]) if true.
passo # rev([X|L],Rev) if rev(L,RL) & app(X,RL,Rev).
