Poprawne wejście w case of przy otrzymaniu odpowiedniego znaku

0

Witam,
małe pytanie, które zawsze mi sprawia problemy, jak poprawnie napisać case of tak, aby po otrzymaniu znaku 'q' wyszedł mi z pętli ?
Oto kod:

 
-module(training).
-compile(export_all).

main() ->
    Pid = spawn(training, msg, []),
    register(message, Pid),
    
    {ok, [A]} = io:fread("add sth to list: ", "~s"),
    message ! {lista, [A]},
    add_to_list([], A).

add_to_list(List) ->
    io:fwrite("List: ~p~n", [List]),
    {ok, [A]} = io:fread("add sth to list: ", "~s"),
    message ! {lista, [List]},
    add_to_list(List, A).

add_to_list(List, What) ->
    add_to_list(List ++ [What]).


msg() ->
    receive
        {lista, [List]} ->
            io:fwrite("Otrzymalem ~p~n", [List]);
        _ ->
            ok
    end,
    msg().

A case of chce wsadzić do funkcji " add_to_list(List, What) "
miałem coś takiego w tej funkcji, ale przy uruchomieniu programu i wpisaniu czegoś, to się program wywala:

case What of
        "q" -> exit(koniec)
end,
 

Dzięki za pomoc

Gdy dodam case of to wypluwa gdy np. wpisze 5 :

** exception error: no case clause matching "5"
     in function training:add_to_list/2

zrobilem cos w stylu

case What of
    "q" -> exit(true);
     _ -> add_to_list(List ++ [What])
end.

i działa, ale jest brzydkie wyjście z programu bo wyrzuca:

** exception exit: true
     in function training:add_to_list/2

Jak zrobić ładne zakończenie programu ?

0

Zgodnie z dokumentacją należy użyć init:stop().

1 użytkowników online, w tym zalogowanych: 0, gości: 1