Forum Informatica Unict

LAUREA MAGISTRALE => Linguaggi di Programmazione, 9 CFU => Topic started by: rox on 13-09-2014, 16:15:48



Title: automa in erlang
Post by: rox 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:
(http://i62.tinypic.com/2nu6d6b.jpg)
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  .smile

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?