标签: state-machine

实现C#yield语句的算法

我想自己弄明白,但我想知道将带有yield语句的函数转换为枚举器状态机的算法是什么?例如,C#如何转变:

IEnumerator<string> strings(IEnumerable<string> args)
 { IEnumerator<string> enumerator2 = getAnotherEnumerator();     
   foreach(var arg in arg) 
    { enumerator2.MoveNext();
      yield return arg+enumerator.Current;
    } 
 }
Run Code Online (Sandbox Code Playgroud)

进入这个:

bool MoveNext()
 { switch (this.state)
    {
        case 0:
            this.state = -1;
            this.enumerator2 = getAnotherEnumerator();
            this.argsEnumerator = this.args.GetEnumerator();
            this.state = 1;
            while (this.argsEnumerator.MoveNext())
            {
                this.arg = this.argsEnumerator.Current;
                this.enumerator2.MoveNext();
                this.current = this.arg + this.enumerator2.Current;
                this.state = 2;
                return true;

              state1:
                this.state = 1;
            }
            this.state = -1;
            if (this.argsEnumerator != null) this.argsEnumerator.Dispose();
            break;

        case 2:
            goto state1;
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction algorithm iterator state-machine

31
推荐指数
3
解决办法
3843
查看次数

如何在Objective-C中建立一个基本的有限状态机

我正在尝试构建一个FSM来控制(iphone sdk)目标c中的计时器.我觉得这是一个必要的步骤,因为我最终得到了含有if-then语句页面的令人讨厌的意大利面条代码.复杂性,不可读性以及添加/更改功能的难度使我尝试更正式的解决方案.

在应用程序的上下文中,计时器的状态确定与NSManagedObjects,Core Data等的一些复杂交互.我暂时保留了所有功能,试图清楚地了解FSM代码.

问题是,我在Obj-C中找不到这种代码的任何例子,我对如何从我使用的C++示例代码中翻译它并不是很有信心.(我完全不懂C++,所以有一些猜测.)我在这篇文章的基础上建立了这个版本的状态模式设计:http://www.ai-junkie.com/architecture/state_driven/tut_state1. HTML.我不是在制作游戏,但是这篇文章概述了适用于我正在做的事情的概念.

为了创建代码(在下面发布),我必须学习很多新概念,包括obj-c协议等等.因为这对我来说是新的,就像状态设计模式一样,我希望得到一些关于这种实现的反馈.这是你如何在obj-c中有效地使用协议对象?

这是协议:

@class Timer;
@protocol TimerState 

-(void) enterTimerState:(Timer*)timer;
-(void) executeTimerState:(Timer*)timer;
-(void) exitTimerState:(Timer*)timer;

@end
Run Code Online (Sandbox Code Playgroud)

这是Timer对象(在其最剥离的形式中)头文件:

@interface Timer : NSObject
{       
    id<TimerState> currentTimerState;
    NSTimer *secondTimer;
    id <TimerViewDelegate> viewDelegate;

    id<TimerState> setupState;
    id<TimerState> runState;
    id<TimerState> pauseState;
    id<TimerState> resumeState;
    id<TimerState> finishState;
}

@property (nonatomic, retain) id<TimerState> currentTimerState;
@property (nonatomic, retain) NSTimer *secondTimer;
@property (assign) id <TimerViewDelegate> viewDelegate;

@property (nonatomic, retain) id<TimerState> setupState;
@property (nonatomic, retain) id<TimerState> runState;
@property (nonatomic, retain) id<TimerState> pauseState;
@property (nonatomic, retain) …
Run Code Online (Sandbox Code Playgroud)

protocols objective-c state-machine

30
推荐指数
3
解决办法
2万
查看次数

如何为状态机或有限自动机实现RESTful资源

我是一个Rails和REST新手,我正在试图找出如何最好地公开由具有状态机的域对象支持的资源(换句话说是有限自动机).

我已经看到了许多用于使模型类成为状态机的宝石,例如aasm,过渡,工作流,但它们都没有记录它们如何在面向资源的控制器中实际使用的示例.它们似乎都暗示状态转换是由"事件"触发的,这实际上是一种方法调用.我对这意味着的一些问题是:

  1. 更新操作(PUT方法)不合适,因为PUT被认为是幂等的.唯一可能的是,如果州是作为代表的一部分发送的.这与"事件"不一致.它是否正确?
  2. 由于事件不是幂等的,因此必须使用POST.但是,到哪个资源?每个可能的事件都有子资源吗?或者,是否有一个(/ updatestate)将触发事件和事件的任何参数作为其表示?
  3. 由于资源的状态是由另一个资源可能触发的事件修改的,因此create action是否应接受对state属性(或依赖于状态机的任何其他属性)的更改?
  4. [更新的问题]在UI中公开转换的好方法是什么?由于事件不是状态,因此似乎允许更新状态属性(以及依赖于状态转换的任何其他属性)是没有意义的.这是否意味着在更新操作中应忽略这些属性?

rest ruby-on-rails state-machine

27
推荐指数
3
解决办法
5600
查看次数

状态机和状态模式的实现有什么区别?

我想知道状态机是否只是工作中的状态模式,或者这两者之间是否存在差异?

我发现这篇文章的标题是"状态设计模式与状态机",但在一天结束时他只说状态模式使状态机过时但后来没有描述状态机究竟是什么状态机与实施国家格局.

architecture state design-patterns state-machine

27
推荐指数
3
解决办法
1万
查看次数

使用"yield"关键字实现状态机

使用yield关键字来实现这里所示的简单状态机是否可行.对我来说,看起来C#编译器为您完成了艰苦的工作,因为它在内部实现了状态机以使yield语句有效.

你可以在编译器已经完成的工作之上捎带并让它为你实现大部分状态机吗?

有没有人这样做,技术上可行吗?

c# yield state-machine fsm

25
推荐指数
2
解决办法
1万
查看次数

是否有内置状态机构造的编程语言?

我很好奇是否有一种编程语言将状态机(类似于boost :: statechart)作为主要语言构造.

类比 - c#有委托,其中java使用观察者模式,C有回调.Perl和python有内置哈希,而C++和java需要一个库.

更新:

这应该是C++,C#,Java,Lisp等意义上的通用编程语言......

我的意思是"成熟"的状态机,在Harel形式主义或UML状态图或boost :: statechart的层面上都有所有的铃声和​​口哨声.

programming-languages state-machine statechart

25
推荐指数
3
解决办法
1万
查看次数

"有限状态机"和"状态机"之间有区别吗?

如果有限状态机和状态机之间存在差异,我不确定我是否理解?我是不是觉得这个太难了?

math statistics state-machine computation-theory

24
推荐指数
3
解决办法
1万
查看次数

状态机和工作流有什么区别?

我想了解"状态机"和"工作流程"之间的区别,它与"状态机工作流程"有什么不同?

business-process-management state-machine workflow-foundation

21
推荐指数
3
解决办法
2万
查看次数

测试大型状态机的策略是什么?

我继承了一个庞大且相当复杂的状态机.它有31种可能的状态,都是真正需要的(大业务流程).它有以下输入:

  • 枚举:当前状态(所以0 - > 30)
  • 枚举:来源(目前只有2个条目)
  • 布尔值:请求
  • 布尔值:类型
  • 枚举:状态(3个州)
  • 枚举:处理(3个州)
  • 布尔值:已完成

将其分解为单独的状态机似乎不可行,因为每个状态都是不同的.我为最常见的输入编写了测试,每个输入有一个测试,所有输入都是常量,除了State.

[Subject("Application Process States")]
public class When_state_is_meeting2Requested : AppProcessBase
{
    Establish context = () =>
    {
        //Setup....
    };

    Because of = () => process.Load(jas, vac);

    It Current_node_should_be_meeting2Requested = () => process.CurrentNode.ShouldBeOfType<meetingRequestedNode>();
    It Can_move_to_clientDeclined = () => Check(process, process.clientDeclined);
    It Can_move_to_meeting1Arranged = () => Check(process, process.meeting1Arranged);
    It Can_move_to_meeting2Arranged = () => Check(process, process.meeting2Arranged);
    It Can_move_to_Reject = () => Check(process, process.Reject);
    It Cannot_move_to_any_other_state = () => AllOthersFalse(process);
}
Run Code Online (Sandbox Code Playgroud)

没有人完全确定每个状态和输入集的输出应该是什么.我已经开始为它编写测试了.但是,我需要写一些像4320测试(30*2*2*2*3*3*2)的东西. …

c# unit-testing state-machine mspec

20
推荐指数
1
解决办法
4857
查看次数

Haskell中的有限自动机

在Haskell中表示有限自动机的好方法是什么?它的数据类型如何?

在我们学院,自动机被定义为5元组

(Q, X, delta, q_0, F)
Run Code Online (Sandbox Code Playgroud)

其中Q是自动机状态的集合,X是字母表(这部分甚至是必要的),delta是从(Q,X)获取2元组并返回状态/ -s(在非确定性版本中)的转换函数, F是接受/结束状态的集合.

最重要的是,我不确定delta应该有什么类型......

haskell state-machine representation automaton

20
推荐指数
2
解决办法
6070
查看次数