华清远见-嵌入式人工智能

138 阅读4分钟

download:华清远见-嵌入式人工智能

1 状态机简介

1.1 定义

我们先来给出状态机的根本定义。一句话:

状态机是有限状态自动机的简称,是理想事物运转规则笼统而成的一个数学模型。

先来解释什么是“状态”( State )。理想事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描绘的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed 。

状态机,也就是 State Machine ,不是指一台实践机器,而是指一个数学模型。说白了,普通就是指一张状态转换图。例如,依据自动门的运转规则,我们能够笼统出下面这么一个图。

自动门有两个状态,open 和 closed ,closed 状态下,假如读取开门信号,那么状态就会切换为 open 。open 状态下假如读取关门信号,状态就会切换为 closed 。

状态机的全称是有限状态自动机,自动两个字也是包含重要含义的。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态时能够明白的运算出来的。例如关于自动门,给定初始状态 closed ,给定输入“开门”,那么下一个状态时能够运算出来的。

这样状态机的根本定义我们就引见终了了。反复一下:状态机是有限状态自动机的简称,是理想事物运转规则笼统而成的一个数学模型。

1.2 四大约念

下面来给出状态机的四大约念。

第一个是 State ,状态。一个状态机至少要包含两个状态。例如上面自动门的例子,有 open 和 closed 两个状态。

第二个是 Event ,事情。事情就是执行某个操作的触发条件或者口令。关于自动门,“按下开门按钮”就是一个事情。

第三个是 Action ,动作。事情发作以后要执行动作。例如事情是“按开门按钮”,动作是“开门”。编程的时分,一个 Action 普通就对应一个函数。

第四个是 Transition ,变换。也就是从一个状态变化为另一个状态。例如“开门过程”就是一个变换。

2 DSL

2.1 DSL

DSL是一种工具,它的中心价值在于,它提供了一种手腕,能够愈加明晰地就系统某局部的企图停止沟通。

这种明晰并非只是审美追求。一段代码越容易看懂,就越容易发现错误,也就越容易对系统停止修正。因而,我们鼓舞变量名要有意义,文档要写分明,代码构造要写明晰。基于同样的理由,我们应该也鼓舞采用DSL。

依照定义来说,DSL是针对某一特定范畴,具有受限表达性的一种计算机程序设计言语。

这一定义包含3个关键元素:

言语性(language nature):DSL是一种程序设计言语,因而它必需具备连接的表达才能——不论是一个表达式还是多个表达式组合在一同。

受限的表达性(limited expressiveness):通用程序设计言语提供普遍的才能:支持各种数据、控制,以及笼统构造。这些才能很有用,但也会让言语难于学习和运用。DSL只支持特定范畴所需求特性的最小集。运用DSL,无法构建一个完好的系统,相反,却能够处理系统某一方面的问题。

针对范畴(domain focus):只要在一个明白的小范畴下,这种才能有限的言语才会有用。这个范畴才使得这种言语值得运用。

比方正则表达式,/\d{3}-\d{3}-\d{4}/就是一个典型的DSL,处理的是字符串匹配这个特定范畴的问题。

2.2 DSL的分类

依照类型,DSL能够分为三类:内部DSL(Internal DSL)、外部DSL(External DSL)、以及言语工作台(Language Workbench)。

Internal DSL是一种通用言语的特定用法。用内部DSL写成的脚本是一段合法的程序,但是它具有特定的作风,而且只用到了言语的一局部特性,用于处置整个系统一个小方面的问题。 用这种DSL写出的程序有一种自定义言语的作风,与其所运用的宿主言语有所区别。例如我们的状态机就是Internal DSL,它不支持脚本配置,运用的时分还是Java言语,但并无妨碍它也是DSL。

builder.externalTransition()
                .from(States.STATE1)
                .to(States.STATE2)
                .on(Events.EVENT1)
                .when(checkCondition())
                .perform(doAction());

External DSL是一种“不同于应用系统主要运用言语”的言语。外部DSL通常采用自定义语法,不过选择其他言语的语法也很常见(XML就是一个常见选 择)。比方像Struts和Hibernate这样的系统所运用的XML配置文件。

Workbench是一个专用的IDE,简单点说,工作台是DSL的产品化和可视化形态。