التعبير عن المنطق الزمني للأفعال في إرلانج.بأي طريقة طبيعية؟

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

  •  14-11-2019
  •  | 
  •  

سؤال

أرغب في ترجمة بعض الإجراءات المحددة في TLA في إرلانج.هل يمكنك التفكير في أي طريقة طبيعية للقيام بذلك مباشرة في Erlang أو في أي إطار عمل متاح لذلك؟باختصار (صغير جدًا)، إجراءات TLA هي شروط على المتغيرات، وبعضها مُجهز، مما يعني أنها تمثل قيم المتغيرات في الحالة التالية.على سبيل المثال:

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

ويعني هذا الإجراء أنه عندما تكون حالة النظام على هذا النحو PredicateA صحيح للمتغير x وإما PredicateB صحيح ل y أو PredicateC صحيح ل z, ، فقد يغير النظام حالته بحيث يبقى كل شيء على حاله ما عدا ذلك x التغييرات في القيمة الحالية زائد 1.

التعبير عن ذلك في إيرلانج يتطلب الكثير من السباكة، على الأقل بالطريقة التي وجدتها.على سبيل المثال، من خلال وجود حلقة تقوم بتقييم الشروط قبل تشغيلها، مثل:

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).

أفكر في كتابة إطار عمل لإخفاء هذه السباكة، ويتضمن تمرير الرسائل داخل get_new_info() وظيفة ونأمل أن تظل متوافقة مع OTP.إذا كنت تعرف أي إطار عمل يقوم بذلك بالفعل أو إذا كان بإمكانك التفكير في طريقة بسيطة لتنفيذ ذلك، سأكون ممتنًا لسماع ذلك.

هل كانت مفيدة؟

المحلول

أعتقد gen_fsm(3) من المحتمل أن يجعل هذا السلوك حياتك أسهل قليلًا.

ولايات ميكرونيزيا الموحدة من آلة الدولة المحدودة, ، وليس Flying Spaghetti Monster، على الرغم من أن الأخير يمكن أن يساعد أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top