mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-21 04:13:46 +00:00
51 lines
1.3 KiB
Mathematica
51 lines
1.3 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% This is a regression test.
|
|
% Mercury 0.6 generated incorrect code for this test case.
|
|
|
|
:- module mu.
|
|
:- interface.
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is cc_multi.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module char.
|
|
:- import_module int.
|
|
:- import_module list.
|
|
:- import_module std_util.
|
|
:- import_module string.
|
|
|
|
main(!IO) :-
|
|
( if mu(N, [m, (.)], Charlist, N0) then
|
|
string.from_char_list(Charlist, S),
|
|
io.write_string(S, !IO),
|
|
io.write_string("\n", !IO),
|
|
write_pint(N, !IO),
|
|
write_pint(N0, !IO)
|
|
else
|
|
io.write_string("Failed\n", !IO)
|
|
).
|
|
|
|
:- type pint
|
|
---> z
|
|
; s(pint).
|
|
|
|
:- pred write_pint(pint::in, io::di, io::uo) is det.
|
|
|
|
write_pint(z, !IO) :-
|
|
io.write_string("0\n", !IO).
|
|
write_pint(s(N), !IO) :-
|
|
io.write_string("1+", !IO),
|
|
write_pint(N, !IO).
|
|
|
|
:- pred mu(pint::out, list(char)::in, list(char)::out, pint::out) is nondet.
|
|
|
|
mu(z, ['.' | Charlist], Charlist, z) .
|
|
mu(s(z), [m | Charlist1], Charlist1, N0) :-
|
|
% s(N)=s(z), % if this line is commented out --> SEGV
|
|
mu(N0, Charlist1, _Charlist, _).
|