Annotated using CiaoPP: :- mode(rev/2, [+,-]). :- mode(app/3, [+,+,-]). :- measure(rev/2, [length,length]). :- measure(app/3, [length,length,length]). %complexity: rev(i,o). %% rev(Xs, Ys) :- Ys is the result of reversing the list Xs. %% %TWTYPES :- type rev(list,list). rev([], []). rev([X | Xs], Ys) :- rev(Xs, Zs), app(Zs, [X], Ys). %TWTYPES :- type app(list,list,list). app([],X,X). app([X|Xs],Ys,[X|Zs]) :- app(Xs,Ys,Zs). /*TWDESC rev(Xs, Ys) :- Ys is the result of reversing the list Xs. */ /*TWTYPES list([]). list([X|Xs]) :- poly(X), list(Xs). poly(dummy). */ /*TWDEMO selected_norms([list,poly]). query(rev(b,f,f,f)). query(rev(f,b,f,f)). query(app(b,f,f,f,f,f)). query(app(f,b,f,f,f,f)). query(app(f,f,f,f,b,f)). query(app(f,f,f,f,f,b)). */ Caslog 1.0, April 1992. * Mutually exclusive classes of clauses for predicate app/3 : [[1],[2]] * Size functions for predicate app/3 : [$(1),$(2),$(2)+ $(1)] * Relation functions for predicate app/3 : [inf] * Solution functions for predicate app/3 : [1] * Time functions for predicate app/3 : [$(1)+1] * Mutually exclusive classes of clauses for predicate rev/2 : [[1],[2]] * Size functions for predicate rev/2 : [$(1),$(1)] * Relation functions for predicate rev/2 : [inf] * Solution functions for predicate rev/2 : [1] * Time functions for predicate rev/2 : [0.5*exp($(1),2)+1.5* $(1)+1] {Exexution Time: 4.0 msec} {End of Caslog execution.}