mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-20 03:43:51 +00:00
This first step deals with the consequences of such removal.
The removal itself will happen in stage 2. That step will
add "is" to the prolog module in the library.
compiler/add_pred.m:
Prepare for "is" being in the prolog module.
compiler/options.m:
Add a way to test whether the change to add_pred.m is in the
installed compiler.
tests/accumulator/base.m:
tests/accumulator/call_in_base.m:
tests/accumulator/chain.m:
tests/accumulator/commutative.m:
tests/accumulator/construct_test.m:
tests/accumulator/dcg.m:
tests/accumulator/deconstruct_test.m:
tests/accumulator/disj.m:
tests/accumulator/func.m:
tests/accumulator/heuristic.m:
tests/accumulator/highorder.m:
tests/accumulator/identity.m:
tests/accumulator/inter.m:
tests/accumulator/nonrec.m:
tests/accumulator/out_to_in.m:
tests/accumulator/qsort.m:
tests/accumulator/simple.m:
tests/accumulator/split.m:
tests/accumulator/swap.m:
tests/benchmarks/cqueens.m:
tests/benchmarks/crypt.m:
tests/benchmarks/deriv.m:
tests/benchmarks/deriv2.m:
tests/benchmarks/nrev.m:
tests/benchmarks/poly.m:
tests/benchmarks/primes.m:
tests/benchmarks/qsort.m:
tests/benchmarks/query.m:
tests/benchmarks/tak.m:
tests/debugger/interactive.m:
tests/declarative_debugger/Mercury.options:
tests/declarative_debugger/io_read_bug.m:
tests/declarative_debugger/queens.exp:
tests/declarative_debugger/queens.m:
tests/dppd/imperative_solve_impl.m:
tests/dppd/map_impl.m:
tests/dppd/max_length_impl.m:
tests/dppd/sum.m:
tests/dppd/upto_sum_impl.m:
tests/par_conj/dep_par_21.m:
tests/tabling/seq.m:
tests/term/dds3_14.m:
tests/term/mmatrix.m:
tests/term/money.m:
tests/term/occur.m:
tests/term/pl4_5_2.m:
tests/term/queens.m:
tests/typeclasses/inference_test.m:
tests/typeclasses/inference_test_2.m:
tests/valid/lazy_list.m:
tests/warnings/duplicate_const.m:
Replace calls to "is" with unifications. In many places,
bring programming style up to date.
84 lines
1.9 KiB
Mathematica
84 lines
1.9 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% Tests chained calls to a predicate that requires rearrangement.
|
|
%
|
|
|
|
:- module chain.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module int.
|
|
:- import_module list.
|
|
|
|
main(!IO) :-
|
|
io.write_string("pa: ", !IO),
|
|
pa([5, 6, 7], ListA),
|
|
io.write_line(ListA, !IO),
|
|
io.write_string("pb: ", !IO),
|
|
pb([5, 6, 7], ListB),
|
|
io.write_line(ListB, !IO),
|
|
io.write_string("pc: ", !IO),
|
|
pc([1, 3, 5], ValC),
|
|
io.write_line(ValC, !IO),
|
|
io.write_string("pd: ", !IO),
|
|
pd([2, 4, 5], ValD),
|
|
io.write_line(ValD, !IO).
|
|
|
|
% append([H], [1], NewH) is static so we can introduce
|
|
% accumulator recursion.
|
|
%
|
|
:- pred pa(list(int)::in, list(int)::out) is det.
|
|
|
|
pa([], []).
|
|
pa(X, Y) :-
|
|
X = [H | T],
|
|
pa(T, T0),
|
|
append([H], [1], NewH),
|
|
append(T0, NewH, Y).
|
|
|
|
% We have two calls to append with dynamic variables in them
|
|
% that require rearrangement. Hence we can't introduce
|
|
% accumulator recursion.
|
|
%
|
|
:- pred pb(list(int)::in, list(int)::out) is det.
|
|
|
|
pb([], []).
|
|
pb(X, Y) :-
|
|
X = [H | T],
|
|
pb(T, T0),
|
|
append([1], T0, NewT),
|
|
append([H], NewT, Y).
|
|
|
|
% We have two calls to append with dynamic variables in them
|
|
% that don't require rearrangement. Hence we CAN introduce
|
|
% accumulator recursion.
|
|
%
|
|
:- pred pc(list(int)::in, int::out) is det.
|
|
|
|
pc([], 0).
|
|
pc(X, Y) :-
|
|
X = [H | T],
|
|
pc(T, Y0),
|
|
Tmp = Y0 + (2 * H),
|
|
Y = Tmp + H.
|
|
|
|
% We CANNOT introduce accumulators because the chain of calls
|
|
% are to different predicates.
|
|
%
|
|
:- pred pd(list(int)::in, int::out) is det.
|
|
|
|
pd([], 0).
|
|
pd(X, Y) :-
|
|
X = [H | T],
|
|
pd(T, Y0),
|
|
Tmp = 2 * Y0,
|
|
Y = Tmp + H.
|