Anyway...in the end it's working fine, so I'm quite happy -:)
Mercury has a lot of pretty convenient functions...you just need to find them out -;)
| led_numbers.m |
|---|
:- module led_numbers.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module list, string, int, array, char.
:- pred get_leds(list.list(character)::in, list.list(character)::in,
int::in, list.list(string)::out ) is det.
get_leds(LDIGITS, LDIGITS_AUX, N, RESPONSE) :-
(
LEDS = array([array([" _ ","| | ","|_| "]),
array([" ","| ","| "]),
array([" _ "," _| ","|_ "]),
array(["_ ","_| ","_| "]),
array([" ","|_| "," | "]),
array([" _ ","|_ "," _| "]),
array([" _ ","|_ ","|_| "]),
array(["_ "," | "," | "]),
array([" _ ","|_| ","|_| "]),
array([" _ ","|_| "," _| "])
]),
list.length(LDIGITS,LEN),
( if LEN > 0 then
HEAD = det_head(LDIGITS),
TAIL = det_tail(LDIGITS),
char.to_int(HEAD, HEAD_I:int),
HEAD_N:int = HEAD_I - 48,
LINE = elem(HEAD_N, LEDS),
SUB_LINE = elem(N, LINE),
get_leds(TAIL, LDIGITS_AUX, N, RESULT),
RESPONSE = [SUB_LINE] ++ RESULT
else if N < 2 then
get_leds(LDIGITS_AUX, LDIGITS_AUX, N+1, RESULT),
RESPONSE = ["\n"] ++ RESULT
else if N = 2 then
RESPONSE = ["\n"]
else
RESPONSE = [] )
).
main(!IO) :-
io.write_string("Enter a number: ",!IO),
io.read_line_as_string(Result, !IO),
( if
Result = ok(String),
NUM = string.strip(String),
to_char_list(NUM,LDIGITS),
get_leds(LDIGITS, LDIGITS, 0, RESPONSE)
then
io.write_string(string.join_list("", RESPONSE), !IO)
else
io.write_string("Not a number...",!IO)
).
|
Anyway...here are the screens -;)
Hope you like it -;)
Greetings,
Blag.
Development Culture.



