mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-20 20:03:44 +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.
156 lines
3.6 KiB
Mathematica
156 lines
3.6 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% generated: 7 March 1990
|
|
% option(s):
|
|
%
|
|
% (deriv) times10
|
|
%
|
|
% David H. D. Warren
|
|
%
|
|
% symbolic derivatives
|
|
|
|
:- module deriv2.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module int.
|
|
:- import_module prolog.
|
|
|
|
main(!IO) :-
|
|
( if main4(E1, E2, E3, E4) then
|
|
print_expr(E1, !IO),
|
|
io.write_string("\n\n", !IO),
|
|
print_expr(E2, !IO),
|
|
io.write_string("\n\n", !IO),
|
|
print_expr(E3, !IO),
|
|
io.write_string("\n\n", !IO),
|
|
print_expr(E4, !IO),
|
|
io.write_string("\n", !IO)
|
|
else
|
|
true
|
|
).
|
|
|
|
:- type expr
|
|
---> x
|
|
; num(int)
|
|
; expr + expr
|
|
; expr - expr
|
|
; expr * expr
|
|
; expr / expr
|
|
; - expr
|
|
; expr ** int
|
|
; log(expr)
|
|
; exp(expr).
|
|
|
|
:- pred main4(expr::out, expr::out, expr::out, expr::out) is semidet.
|
|
|
|
main4(E1, E2, E3, E4) :-
|
|
ops8(E1),
|
|
divide10(E2),
|
|
log10(E3),
|
|
times10(E4).
|
|
|
|
:- pred times10(expr::out) is semidet.
|
|
|
|
times10(E) :-
|
|
d(x * x * x * x * x * x * x * x * x * x * x, x, E).
|
|
|
|
:- pred log10(expr::out) is semidet.
|
|
|
|
log10(E) :-
|
|
d(log(log(log(log(log(log(log(log(log(log(x)))))))))), x, E).
|
|
|
|
:- pred ops8(expr::out) is semidet.
|
|
|
|
ops8(E) :-
|
|
d((x + num(1)) * ((x ** 2 + num(2)) * (x ** 3 + num(3))), x, E).
|
|
|
|
:- pred divide10(expr::out) is semidet.
|
|
|
|
divide10(E) :-
|
|
d(x / x / x / x / x / x / x / x / x / x / x, x, E).
|
|
|
|
:- pred d(expr::in, expr::in, expr::out) is semidet.
|
|
|
|
d(U + V, X, DU + DV) :-
|
|
d(U, X, DU),
|
|
d(V, X, DV).
|
|
d(U - V, X, DU - DV) :-
|
|
d(U, X, DU),
|
|
d(V, X, DV).
|
|
d(U * V, X, DU * V + U * DV) :-
|
|
d(U, X, DU),
|
|
d(V, X, DV).
|
|
d(U / V, X, (DU * V - U * DV) / (V ** 2)) :-
|
|
d(U, X, DU),
|
|
d(V, X, DV).
|
|
d(U ** N, X, DU * num(N) * (U ** (N - 1))) :-
|
|
d(U, X, DU).
|
|
d(-U, X, -DU) :-
|
|
d(U, X, DU).
|
|
d(exp(U), X, exp(U) * DU) :-
|
|
d(U, X, DU).
|
|
d(log(U), X, DU / U) :-
|
|
d(U, X, DU).
|
|
d(x, x, num(1)).
|
|
d(num(_), _, num(0)).
|
|
|
|
:- pred print_expr(expr::in, io::di, io::uo) is det.
|
|
|
|
print_expr(x, !IO) :-
|
|
io.write_string("x", !IO).
|
|
print_expr(num(N), !IO) :-
|
|
io.write_string("num(", !IO),
|
|
io.write_int(N, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(log(E), !IO) :-
|
|
io.write_string("log(", !IO),
|
|
print_expr(E, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(exp(E), !IO) :-
|
|
io.write_string("exp(", !IO),
|
|
print_expr(E, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(E ** N, !IO) :-
|
|
io.write_string("pow(", !IO),
|
|
print_expr(E, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write_int(N, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(E1 + E2, !IO) :-
|
|
io.write_string("plus(", !IO),
|
|
print_expr(E1, !IO),
|
|
io.write_string(", ", !IO),
|
|
print_expr(E2, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(E1 - E2, !IO) :-
|
|
io.write_string("minus(", !IO),
|
|
print_expr(E1, !IO),
|
|
io.write_string(", ", !IO),
|
|
print_expr(E2, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(E1 * E2, !IO) :-
|
|
io.write_string("times(", !IO),
|
|
print_expr(E1, !IO),
|
|
io.write_string(", ", !IO),
|
|
print_expr(E2, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(E1 / E2, !IO) :-
|
|
io.write_string("div(", !IO),
|
|
print_expr(E1, !IO),
|
|
io.write_string(", ", !IO),
|
|
print_expr(E2, !IO),
|
|
io.write_string(")", !IO).
|
|
print_expr(-E, !IO) :-
|
|
io.write_string("neg(", !IO),
|
|
print_expr(E, !IO),
|
|
io.write_string(")", !IO).
|