mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-18 19:03:45 +00:00
library/time.m: library/benchmarking.m: Rename time.m as benchmarking.m. library/library.m.in: library/io.m: tests/hard_coded/error_func.m: Change `import_module' declarations to import benchmarking.m instead of time.m. NEWS: s/time.m/benchmarking.m/
75 lines
1.9 KiB
Mathematica
75 lines
1.9 KiB
Mathematica
/*
|
|
$ mc bug2
|
|
bug2.m:009: Warning: incorrect module name in `:- module' declaration.
|
|
bug2.m:034: In `error(in) = out':
|
|
bug2.m:034: warning: determinism declaration could be tighter.
|
|
bug2.m:034: Declared `det', inferred `erroneous'.
|
|
Software error: variable V_32 not found
|
|
*/
|
|
:- module error_func.
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io__state::di, io__state::uo) is cc_multi.
|
|
|
|
:- implementation.
|
|
:- import_module list, int, require, benchmarking, string.
|
|
|
|
:- func first_denomination(int) = int.
|
|
first_denomination(Kinds_of_coins) =
|
|
(if (Kinds_of_coins = 1) then
|
|
1
|
|
else if (Kinds_of_coins = 2) then
|
|
5
|
|
else if (Kinds_of_coins = 3) then
|
|
10
|
|
else if (Kinds_of_coins = 4) then
|
|
25
|
|
else if (Kinds_of_coins = 5) then
|
|
50
|
|
else
|
|
error("wrong kind of coin")
|
|
).
|
|
|
|
:- func error(string) = _.
|
|
error(S) = _ :-
|
|
error(S).
|
|
|
|
:- func cc_tail(int, int, int) = int.
|
|
cc_tail(Amount, Kinds_of_coins, Count) =
|
|
(if (Amount = 0) then
|
|
Count + 1
|
|
else if (Amount < 0 ; Kinds_of_coins = 0) then
|
|
Count
|
|
else
|
|
cc_tail(Amount - first_denomination(Kinds_of_coins),
|
|
Kinds_of_coins,
|
|
cc_tail(Amount, Kinds_of_coins - 1, Count))
|
|
).
|
|
|
|
:- func count_change(int) = int.
|
|
count_change(Amount) =
|
|
cc_tail(Amount, 5, 0).
|
|
|
|
:- pred do_count_change(int::in, int::out) is det.
|
|
do_count_change(Amount, Result) :- Result = count_change(Amount).
|
|
|
|
main -->
|
|
io__command_line_arguments(Args),
|
|
(if { Args = [] } then
|
|
{ N = 350 },
|
|
{ do_count_change(N, Answer) },
|
|
io__format("Answer = %d\n", [i(Answer)])
|
|
else if { Args = [Num] } then
|
|
(if { string__to_int(Num, N), N >= 0 } then
|
|
{ benchmark_det(do_count_change, N, Answer, 1, Time) },
|
|
{ string__format("Answer = %d, Time = %d milliseconds\n",
|
|
[i(Answer),i(Time)], Message) },
|
|
io__write_string(Message)
|
|
else
|
|
io__write_string("invalid argument\n")
|
|
)
|
|
else
|
|
io__write_string("wrong number of arguments\n")
|
|
).
|