Pages: [1]   Go Down
Print
Author Topic: automa in erlang  (Read 504 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
rox
Forumista
***
Offline Offline

Posts: 633


« on: 13-09-2014, 16:15:48 »

Salve a tutti,
ho trovato questo codice in rete che simula un automa a stati finiti relativo alle azioni che può fare un cane.
L'automa rappresentato nel seguito è il seguente:
Link Immagine
Il codice che rappresenta l'automa è questo:
Code:
-module(dog_fsm).
-export([start/0, squirrel/1, pet/1]).
 
start() ->
   spawn(fun() -> bark() end).
 
squirrel(Pid) -> Pid ! squirrel.
 
pet(Pid) -> Pid ! pet.
 
bark() ->
   io:format("Dog says: BARK! BARK!~n"),
      receive
         pet ->
            wag_tail();
         _ ->
            io:format("Dog is confused~n"),
            bark()
        after 2000 ->
        bark()
end.
 
wag_tail() ->
   io:format("Dog wags its tail~n"),
      receive
         pet ->
            sit();
         _ ->
            io:format("Dog is confused~n"),
            wag_tail()
        after 30000 ->
        bark()
end.
 
sit() ->
   io:format("Dog is sitting. Gooooood boy!~n"),
   receive
      squirrel ->
         bark();
      _ ->
         io:format("Dog is confused~n"),
         sit()
end.

ho compreso tutto tranne la funzione start. Chi potrebbe spiegarmi cosa fa? In particolare non ho capito come usa spawn e cosa faccia la funzione fun()...
io l'ho appena riscritta in questo modo:
Code:
start() -> bark().

Ovviamente la cosa che poi cambia è come richiamiamo l'automa da terminale, ma questo è facilmente intuibile 

Inoltre volevo chiedere al prof una cosa. Svolto in questo modo l'esercizio per lei andrebbe bene? ... ho visto un esercizio sugli automi nel suo sito e ho visto che lo stile era abbastanza complicato... questo modo di procedere verrebbe considerato corretto?
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
Pages: [1]   Go Up
Print
Jump to: