我想自己弄明白,但我想知道将带有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) 我正在尝试构建一个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) 我是一个Rails和REST新手,我正在试图找出如何最好地公开由具有状态机的域对象支持的资源(换句话说是有限自动机).
我已经看到了许多用于使模型类成为状态机的宝石,例如aasm,过渡,工作流,但它们都没有记录它们如何在面向资源的控制器中实际使用的示例.它们似乎都暗示状态转换是由"事件"触发的,这实际上是一种方法调用.我对这意味着的一些问题是:
我想知道状态机是否只是工作中的状态模式,或者这两者之间是否存在差异?
我发现这篇文章的标题是"状态设计模式与状态机",但在一天结束时他只说状态模式使状态机过时但后来没有描述状态机究竟是什么状态机与实施国家格局.
使用yield关键字来实现这里所示的简单状态机是否可行.对我来说,看起来C#编译器为您完成了艰苦的工作,因为它在内部实现了状态机以使yield语句有效.
你可以在编译器已经完成的工作之上捎带并让它为你实现大部分状态机吗?
有没有人这样做,技术上可行吗?
我很好奇是否有一种编程语言将状态机(类似于boost :: statechart)作为主要语言构造.
类比 - c#有委托,其中java使用观察者模式,C有回调.Perl和python有内置哈希,而C++和java需要一个库.
更新:
这应该是C++,C#,Java,Lisp等意义上的通用编程语言......
我的意思是"成熟"的状态机,在Harel形式主义或UML状态图或boost :: statechart的层面上都有所有的铃声和口哨声.
如果有限状态机和状态机之间存在差异,我不确定我是否理解?我是不是觉得这个太难了?
我想了解"状态机"和"工作流程"之间的区别,它与"状态机工作流程"有什么不同?
business-process-management state-machine workflow-foundation
我继承了一个庞大且相当复杂的状态机.它有31种可能的状态,都是真正需要的(大业务流程).它有以下输入:
将其分解为单独的状态机似乎不可行,因为每个状态都是不同的.我为最常见的输入编写了测试,每个输入有一个测试,所有输入都是常量,除了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)的东西. …
在Haskell中表示有限自动机的好方法是什么?它的数据类型如何?
在我们学院,自动机被定义为5元组
(Q, X, delta, q_0, F)
Run Code Online (Sandbox Code Playgroud)
其中Q是自动机状态的集合,X是字母表(这部分甚至是必要的),delta是从(Q,X)获取2元组并返回状态/ -s(在非确定性版本中)的转换函数, F是接受/结束状态的集合.
最重要的是,我不确定delta应该有什么类型......
state-machine ×10
c# ×3
algorithm ×1
architecture ×1
automaton ×1
business-process-management ×1
fsm ×1
haskell ×1
iterator ×1
math ×1
mspec ×1
objective-c ×1
protocols ×1
rest ×1
state ×1
statechart ×1
statistics ×1
unit-testing ×1
yield ×1