%% $Id: sumcol.mercury,v 1.3 2001/05/13 01:22:35 doug Exp $
%% http://www.bagley.org/~doug/shootout/
:- module mytest.
:- interface.
:- import_module io.
:- pred main(io__state :: di, io__state :: uo) is det.
:- implementation.
:- import_module string, int.
main -->
io__read_line_as_string(IOResult),
sumcol(IOResult, 0).
:- pred sumcol(io__result(string)::in, int::in, io__state::di, io__state::uo) is det.
sumcol(IOResult, Sum) -->
( { IOResult = ok(LineIn) },
{ chomp(LineIn, Line) },
io__read_line_as_string(NewIOResult),
( if { string__to_int(Line, N) } then
sumcol(NewIOResult, Sum + N)
else
sumcol(NewIOResult, Sum)
)
; { IOResult = eof },
io__write_int(Sum),
io__write_string("\n")
; { IOResult = error(_Error) },
io__write_string("Error reading file!")
).
:- pred chomp(string::in, string::out) is det.
chomp(InStr, OutStr) :-
( if string__remove_suffix(InStr, "\n", NewStr) then
OutStr = NewStr
else
OutStr = InStr
).