:- module led.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module list, string, char.
:- pred draw(char, string, string, string).
:- mode draw(in, out, out, out) is semidet.
draw('0', " _ ",
"| |",
"|_|").
draw('1', " ",
" | ",
" | ").
draw('2', " _ ",
" _|",
"|_ ").
draw('3', " _ ",
" _|",
" _|").
draw('4', " ",
"|_|",
" |").
draw('5', " _ ",
"|_ ",
" _|").
draw('6', " _ ",
"|_ ",
"|_|").
draw('7', "_ ",
" | ",
" | ").
draw('8', " _ ",
"|_|",
"|_|").
draw('9', " _ ",
"|_|",
" _|").
:- pred draw(char, {list(string), list(string), list(string)},
{list(string), list(string), list(string)}).
:- mode draw(in, in, out) is semidet.
draw(C, {T,M,B}, {[T1|T],[M1|M],[B1|B]}) :-
draw(C, T1, M1, B1).
:- pred led(string, string, string, string).
:- mode led(in, out, out, out) is semidet.
led(N, Top, Mid, Bot) :-
string.foldl(draw, N, {[], [], []}, {T, M, B}),
Top = string.join_list("", list.reverse(T)),
Mid = string.join_list("", list.reverse(M)),
Bot = string.join_list("", list.reverse(B)).
:- pred led(string::in, io::di, io::uo) is det.
led(S, !IO) :-
(
led(S, T, M, B)
->
io.write_string(T, !IO), io.nl(!IO),
io.write_string(M, !IO), io.nl(!IO),
io.write_string(B, !IO), io.nl(!IO)
;
io.format("Sorry, I didn't understand ``%s''\n", [s(S)], !IO)
).
main(!IO) :-
io.command_line_arguments(Args, !IO),
( Args = [Arg] -> led(Arg, !IO) ; usage(!IO) ).
:- pred usage
Post too long. Click here to view the full text.