mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-25 06:14:18 +00:00
Estimated hours taken: 0.1 Add the DPPD (dozens of problems in partial deduction) suite to the tests directory.
63 lines
1.8 KiB
Mathematica
63 lines
1.8 KiB
Mathematica
|
|
The "depth" Benchmark
|
|
|
|
Part of the DPPD Library.
|
|
|
|
General Description
|
|
|
|
A Lam & Kusalik benchmark. It consists of a simple non-ground
|
|
meta-interpreter which has to be specialised for a fully-unfoldable
|
|
object program. It uses neither negations nor built-ins. For a
|
|
slightly different and more intricate example see the ex_depth
|
|
benchmark (which is not fully unfoldable).
|
|
|
|
The benchmark program
|
|
|
|
depth( true, 0 ).
|
|
depth( (_g1,_gs), _depth ) :-
|
|
depth( _g1, _depth_g1 ),
|
|
depth( _gs, _depth_gs ),
|
|
max( _depth_g1, _depth_gs, _depth ).
|
|
depth( _goal, s(_depth) ) :-
|
|
prog_clause( _goal, _body ),
|
|
depth( _body, _depth ).
|
|
|
|
max( _num, 0, _num ).
|
|
max( 0, s(_num), s(_num) ).
|
|
max( s(_x), s(_y), s(_max) ) :-
|
|
max( _x, _y, _max ).
|
|
|
|
prog_clause( member( _X, _Xs ), append( _, [_X|_], _Xs ) ).
|
|
prog_clause( append( [], _L, _L ), true ).
|
|
prog_clause( append( [_X|_L1], _L2, [_X|_L3] ), append( _L1, _L2, _L3 ) ).
|
|
|
|
The partial deduction query
|
|
|
|
:- depth(member(X,[a,b,c,m,d,e,m,f,g,m,i,j]),Depth).
|
|
|
|
The run-time queries
|
|
|
|
:- depth(member(i,[a,b,c,m,d,e,m,f,g,m,i,j]),Depth).
|
|
|
|
Example solution
|
|
|
|
This benchmark can be fully unfolded. With the ECCE partial deduction
|
|
system one can obtain the following:
|
|
|
|
depth__1(a,s(s(0))).
|
|
depth__1(b,s(s(s(0)))).
|
|
depth__1(c,s(s(s(s(0))))).
|
|
depth__1(m,s(s(s(s(s(0)))))).
|
|
depth__1(d,s(s(s(s(s(s(0))))))).
|
|
depth__1(e,s(s(s(s(s(s(s(0)))))))).
|
|
depth__1(m,s(s(s(s(s(s(s(s(0))))))))).
|
|
depth__1(f,s(s(s(s(s(s(s(s(s(0)))))))))).
|
|
depth__1(g,s(s(s(s(s(s(s(s(s(s(0))))))))))).
|
|
depth__1(m,s(s(s(s(s(s(s(s(s(s(s(0)))))))))))).
|
|
depth__1(i,s(s(s(s(s(s(s(s(s(s(s(s(0))))))))))))).
|
|
depth__1(j,s(s(s(s(s(s(s(s(s(s(s(s(s(0)))))))))))))).
|
|
_________________________________________________________________
|
|
|
|
|
|
Michael Leuschel / K.U. Leuven / michael@cs.kuleuven.ac.be
|