How to save a fortune in Erlang?

I saw people use dict, ordict, a post for status on many blogs I read. I consider this a very important concept.

In general, I understand the meaning of mantaining, recursion, but when it comes to erlang. I am a bit vague about how it is handled .

Any help?

+4
source share
3 answers

State is a modern data location. This is sometimes difficult to remember for two reasons:

  • Status means both data in the program and the current point of program execution and "mode".
  • We are building it to be some kind of magical thing unnecessarily.

Consider this:

" ?" .

" ?" , , .

, ; , , ( ).

...

, , , , . , , / . , , . - , - . , , .

Erlang , , , , . ( , , Erlang - .)

( ) . , , . , , . : " X ?" , , . .

, , Erlang. , , ETS, DETS, mnesia, db- .. . Erlang - , .

"" ?

- :

has_cheeseburger(BurgerName)
  receive
    {From, ask, burger_name} ->
        From ! {ok, BurgerName},
        has_cheeseburger(BurgerName);
    {From, new_burger, _SomeBurger} ->
        From ! {error, already_have_a_burger},
        has_cheeseburger(BurgerName);
    {From, eat_burger} ->
        From ! {ok, {ate, BurgerName}},
        lacks_cheeseburger()
  end.

lacks_cheeseburger()
  receive
    {From, ask, burger_name} ->
        From ! {error, no_burger},
        lacks_cheeseburger();
    {From, new_burger, BurgerName} ->
        From ! {ok, thanks},
        has_cheeseburger(BurgerName);
    {From, eat_burger} ->
        From ! {error, no_burger},
        lacks_cheeseburger()
  end.

? . . IsHoldingBurger receive, , .

, , ( , ) . , , , , , . , " " . OTP , gen_fsm. FSM , , gen_fsm - , , , , . ( , FSM, gen_fsm.)

. ( , , ). OTP gen_fsm .

​​ , , : . . , , , , . , ( C Python), .

Edit

:

loop(State)
  receive
    {async, Message} ->
        NewState = do_something_with(Message),
        loop(NewState);
    {sync, From, Message} ->
        NewState = do_something_with(Message),
        Response = process_some_response_on(NewState),
        From ! {ok, Response},
        loop(NewState);
    shutdown ->
        exit(shutdown);
    Any ->
        io:format("~p: Received: ~tp~n", [self(), Any]),
        loop(State)
  end.

tkowal . Pascal , . . , , , .

, , . .

. , , - , - . . , , , . Python somelist.append(NewElement), , , . Erlang NewList = lists:append(NewElement, SomeList), SomeList - , , , . , , . , . Erlang, , .

+4

- gen_server. , Erlang .

gen_server - , :

  • ,
  • ( " -" " " )

OTP:

  • ..

gen_server - , :

loop(State) ->
    NewState = handle_requests(State),
    loop(NewState).

. , , . , , .

, State. , , Erlang 17 . , .

+6

, , , , .

, , , , , , .

loop(State) ->
    receive
        {add,Item}     -> NewState = [Item|State], % create a new variable
                          loop(NewState); % recall loop with the new variable
        {remove,Item}  -> NewState = lists:filter(fun(X) -> X /= Item end,State) , % create a new variable
                          loop(NewState); % recall loop with the new variable
        {items,Pid}    -> Pid ! {items,State},
                          loop(State);
        stop           -> stopped; % this will be the stop condition
        _              -> loop(State) % ignoring other message may be interesting in a never ending loop
    end
+2

All Articles