expresan la lógica temporal de las acciones en erlang.de cualquier manera natural?

StackOverflow https://stackoverflow.com/questions/5020680

  •  14-11-2019
  •  | 
  •  

Pregunta

Me gustaría traducir algunas de las acciones especificadas en TLA en Erlang.Puede usted pensar en alguna forma natural de hacerlo directamente en Erlang o de cualquier marco de trabajo disponibles para tal?En pocas palabras (muy pequeño), TLA acciones son las condiciones en las variables, algunas de las cuales están preparadas, lo que significa que se representan los valores de las variables en el siguiente estado.Por ejemplo:

Action(x,y,z) ->
    and PredicateA(x),
    and or PredicateB(y)
        or PredicateC(z)
    and x' = x+1

Esta acción significa que, cuando el estado del sistema es tal que PredicateA es cierto para la variable x y ya sea PredicateB es cierto para y o PredicateC es cierto para z, entonces el sistema puede cambiar su estado a fin de que todo sigue igual, excepto que x cambios en el valor actual más 1.

Expresan que en Erlang requiere una gran cantidad de plomería, al menos en la forma que he encontrado.Por ejemplo, por tener un bucle que evalúa las condiciones de antes de la activación de ellos, como:

what_to_do(State,NewInfo) ->
    PA = IsPredicateA(State,NewInfo),
    PB = IsPredicateB(State,NewInfo),
    PC = IsPredicateC(State,NewInfo),
    [{can_do_Action1, PA and (PB or PC}, %this is the action specified above.
     {can_do_Action2, PA and PC},        %this is some other action
     {can_do_Action3, true}]             %this is some action that may be executed at any time.

 loop(State) ->
     NewInfo = get_new_info(),
     CanDo = what_to_do(State,NewInfo),
     RandomAction = rand_action(CanDo),

     case RandDomAction of
          can_do_Action1 -> NewState = Action(x,y,z);
          can_do_Action2 -> NewState = Action2(State);
          can_do_Action3 -> NewState = Action3(State)
     end,
     NewestState = clean_up_old_info(NewState,NewInfo),
     loop(NewestState).

Estoy pensando en escribir un marco para ocultar este plomería, la incorporación de paso de mensajes dentro de la get_new_info() función y, con suerte, todavía lo que es compatible con la FISCALÍA.Si usted sabe de cualquier marco de trabajo que ya se hace o si se puede pensar de una manera sencilla de implementar esto, le agradecería a oír hablar de él.

¿Fue útil?

Solución

Creo gen_fsm(3) comportamiento probablemente podría hacer su vida un poco más fácil.

FSM de Máquina De Estados Finitos, no el Monstruo Espagueti Volador, aunque este último podría ayudar, también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top