当前位置: 首页 > news >正文

网站付款方式软文是什么意思

网站付款方式,软文是什么意思,b2b平台网站功能,wordpress后台能修改模板文件有限状态机(FSM) 是计算机科学中的一种数学模型,可用于表示和控制系统的行为。它由一组状态以及定义在这些状态上的转换函数组成。FSM 被广泛用于计算机程序中的状态机制。 有限状态机(FSM)应用场景 在各种自动化系统…

有限状态机(FSM) 是计算机科学中的一种数学模型,可用于表示和控制系统的行为。它由一组状态以及定义在这些状态上的转换函数组成。FSM 被广泛用于计算机程序中的状态机制。

有限状态机(FSM)应用场景

  • 在各种自动化系统的应用: 例如交通信号灯、地铁站的旋转闸门、银行自动取款机等。通过对状态和转换函数的定义,可以实现对系统行为的精确控制。

    交通信号灯状态流转图

    file

    地铁站的旋转闸门状态流转图

    file

    银行自动取款机状态流转图

    file

  • 在编程领域的应用: 例如在编写编译器和解释器时,可以使用有限状态机(FSM) 来处理词法分析。例如:JSON.Parse

  • 在Notion中应用: 可以使用 有限状态机(FSM) 的相关概念来构建各种工作流程,例如状态转换图、状态转换表等。

  • 在web中应用: 我们熟悉的 Promise 也是一个状态机,具有三个状态:pending、resolved。rejected。

    Promise状态流转图

    file

    登录功能流转图

    file

类似这样的状态机的例子数不胜数,甚至于,人也是一种极其复杂的状态机,给定一种刺激或多种刺激组合,也会触发人从某种状态过渡到另一种状态。只不过复杂程度极高,以至于现代科学完全无法解密这种状态机。

有限状态机(FSM)实现原理

具体来说,FSM由以下几部分组成:

  • 初始状态:系统的初始状态。
  • 状态集合:表示系统可能处于的各种状态。
  • 转移函数:定义系统在不同状态之间的转移条件和结果。
  • 终止状态:系统在某个状态下可以停止计算。

有限状态机(FSM) 的实现基于状态转移图状态转移图 是一个有向图,它表示有限状态机(FSM) 中状态之间的转移关系。在状态转移图中,每个状态表示系统的某种状态,每个转移表示系统从一个状态转移到另一个状态的条件和结果。

实现简易的有限状态机(FSM)

实现步骤

  • 当状态机开始执行时,它会自动进入初始化状态(initial state)。
  • 每个状态都可以定义,在进入(onEnter)或退出(onExit)该状态时发生的行为事件(actions),通常这些行为事件会携带副作用(side effect)。
  • 每个状态都可以定义触发转换(transition)的事件。
  • 转换定义了在退出一个状态并进入另一个状态时,状态机该如何处理这种事件。
  • 在状态转换发生时,可以定义可以触发的行为事件,从而一般用来表达其副作用。

状态转移图

file

function createMachine(stateMachineDefinition) {const machine = {value: stateMachineDefinition.initialState,performTransition(currentState, event) {const currentStateDefinition = stateMachineDefinition[currentState];const destinationTransition = currentStateDefinition.transitions[event];if (!destinationTransition) {return;}const destinationState = destinationTransition.target;const destinationStateDefinition =stateMachineDefinition[destinationState];destinationTransition.action();currentStateDefinition.actions.onExit();destinationStateDefinition.actions.onEnter();machine.value = destinationState;return machine.value;},};return machine;
}const machine = createMachine({initialState: "off",off: {actions: {onEnter() {console.log("off: onEnter");},onExit() {console.log("off: onExit");},},transitions: {switch: {target: "on",action() {console.log('transition action for "switch" in "off" state');},},},},on: {actions: {onEnter() {console.log("on: onEnter");},onExit() {console.log("on: onExit");},},transitions: {switch: {target: "off",action() {console.log('transition action for "switch" in "on" state');},},},},
});let state = machine.value;
console.log(`current state: ${state}`);
state = machine.performTransition(state, "switch");
console.log(`current state: ${state}`);
state = machine.performTransition(state, "switch");
console.log(`current state: ${state}`);

有限状态机(FSM)的 应用实现

在状态比较多的情况下,把状态、事件及 transitions 集中到一个状态机中,进行统一管理。这样不需要写太多的 if-else,或者 case 判断,如果增加状态和事件,也便于代码的维护和扩展。

文本解析器

实现思路

  • 确定状态和输入
    在编写 FSM 之前,我们需要确定我们的状态和输入。在这个例子中,我们将定义三个状态:起始状态、数字状态和字符串状态。我们还将定义四个输入:数字、字母、引号和空格。
  • 定义状态机类
    现在,我们可以编写代码来实现我们的 FSM 。我们需要定义一个状态机类,它将接受输入,并根据转移规则转换状态。该类应该包含以下属性:
    • currentState:当前状态。
    • states:状态列表。
    • transitions:转移列表。
      它还应该包含以下方法:
    • transition:该方法接受一个输入参数 input,根据当前状态以及输入参数,执行相应的状态转换。
  • 定义转移规则
    我们还需要定义状态之间的转移规则。为此,我们将使用转移列表,其中包含状态之间的映射和输入。转移规则应该考虑当前状态和输入,并根据它们确定下一个状态。如果当前状态和输入没有匹配的转移规则,则应该抛出一个异常。
  • 解析文本
    现在,我们可以使用状态机解析文本。我们需要将文本拆分为单词,并将每个单词作为输入提供给状态机。在处理完所有输入后,我们可以通过调用 getInputType 方法来获取解析的令牌。

示例代码

const STATES = {START: "start",NUMBER: "number",STRING: "string",
};const INPUTS = {NUMBER: "number",LETTER: "letter",SPACE: "space",QUOTE: "quote",
};const TRANSITIONS = [{currentState: STATES.START,input: INPUTS.NUMBER,nextState: STATES.NUMBER,},{currentState: STATES.START,input: INPUTS.LETTER,nextState: STATES.STRING,},{ currentState: STATES.START, input: INPUTS.SPACE, nextState: STATES.START },{ currentState: STATES.START, input: INPUTS.QUOTE, nextState: STATES.STRING },{currentState: STATES.NUMBER,input: INPUTS.NUMBER,nextState: STATES.NUMBER,},{ currentState: STATES.NUMBER, input: INPUTS.SPACE, nextState: STATES.START },{currentState: STATES.STRING,input: INPUTS.LETTER,nextState: STATES.STRING,},{ currentState: STATES.STRING, input: INPUTS.SPACE, nextState: STATES.START },{ currentState: STATES.STRING, input: INPUTS.QUOTE, nextState: STATES.START },
];class TextParse {constructor() {this.currentState = STATES.START;this.buffer = "";this.type;}performTransition(input) {const transition = TRANSITIONS.find((t) => t.currentState === this.currentState && t.input === input.type);if (!transition)throw new Error(`Invalid input "${input.value}" for state "${this.currentState}"`);this.currentState = transition.nextState;if (this.currentState === STATES.START) {const token = this.buffer;const type = this.type;this.buffer = "";this.type = "";return {type,value: token,};} else {this.buffer += input.value;this.type = input.type;}}
}function textParse(input) {const textParse = new TextParse();const tokens = [];for (let i = 0; i < input.length; i++) {const char = input[i];try {const token = textParse.performTransition({type: getInputType(char),value: char,});if (token) {tokens.push(token);}} catch (e) {console.error(e.message);return null;}}const lastToken = textParse.performTransition({ type: INPUTS.SPACE });if (lastToken) {tokens.push(lastToken);}return tokens;
}function getInputType(char) {if (/[0-9]/.test(char)) {return INPUTS.NUMBER;} else if (/[a-zA-Z]/.test(char)) {return INPUTS.LETTER;} else if (/[\s\n\t\r]/.test(char)) {return INPUTS.SPACE;} else if (char === '"') {return INPUTS.QUOTE;} else {throw new Error(`Unknown input type for "${char}"`);}
}// Example usage:
console.log(textParse('123 abc "def ghi" 456')); 
// [
//   { type: 'number', value: '123' },
//   { type: 'letter', value: 'abc' },
//   { type: 'letter', value: '"def' },
//   { type: 'letter', value: 'ghi' },
//   { type: '', value: '' },
//   { type: 'number', value: '456' }
// ]

示例代码

web 应用

使用 有限状态机(FSM) 结合 React 构建 web 应用,不局限于身份认证,登录,步骤表单,有蛮多 web 应用在
有限状态机(FSM)的实践 ,下面主要描述 从有限状态机(FSM)在服务端拉取数据的状态转移上的应用

  • 状态转移图

    file

  • 状态集(States)转换规则(Transitions)

const states = {INITIAL: "idle",LOADING: "loading",SUCCESS: "success",FAILURE: "failure",
};
const transitions = {[states.INITIAL]: {fetch: () => /* Returns states.LOADING */,},[states.LOADING]: {},[states.SUCCESS]: {reload: () => /* Returns states.LOADING */,clear: () => /* Returns states.INITIAL */,},[states.FAILURE]: {retry: () => /* Returns states.LOADING */,clear: () => /* Returns states.INITIAL */,},
}

示例代码

总结

结合前端应用的探索体现的不多,可以再作为第二篇内容去探讨,有兴趣的同学可以尝试一下 有限状态机(FSM) 在 web 上的应用探索,以及 Xstate库(FSM封装的功能性库) 的应用,以及跟 状态管理库 差异化的知识。在这里提醒一点,状态管理库 (Redux) 和 Xstate 并不是互斥的,Xstate 关注的是如何设计状态,状态管理库关注的是如何管理状态。事实上,状态机几乎可以与任何无主见的状态管理工具一起使用。我鼓励您探索各种方法,以确定最适合您、您的团队和您的应用程序的方法。 


文章转载自:
http://nonreduction.zLrk.cn
http://cheerfully.zLrk.cn
http://negationist.zLrk.cn
http://apophasis.zLrk.cn
http://intendance.zLrk.cn
http://menagerie.zLrk.cn
http://trinominal.zLrk.cn
http://promptbook.zLrk.cn
http://unlessoned.zLrk.cn
http://discobolus.zLrk.cn
http://cacoethes.zLrk.cn
http://marina.zLrk.cn
http://skyey.zLrk.cn
http://degenerate.zLrk.cn
http://triolein.zLrk.cn
http://lutist.zLrk.cn
http://transire.zLrk.cn
http://erasmian.zLrk.cn
http://futile.zLrk.cn
http://drinkable.zLrk.cn
http://ethnography.zLrk.cn
http://absorbable.zLrk.cn
http://crucible.zLrk.cn
http://slovak.zLrk.cn
http://hornblowing.zLrk.cn
http://extensile.zLrk.cn
http://brassard.zLrk.cn
http://silicidize.zLrk.cn
http://certainly.zLrk.cn
http://disconnect.zLrk.cn
http://tubilingual.zLrk.cn
http://backbite.zLrk.cn
http://hare.zLrk.cn
http://guanin.zLrk.cn
http://hieratic.zLrk.cn
http://overdiligent.zLrk.cn
http://unfilmed.zLrk.cn
http://distinct.zLrk.cn
http://fricando.zLrk.cn
http://xat.zLrk.cn
http://biopoiesis.zLrk.cn
http://houndstooth.zLrk.cn
http://airdate.zLrk.cn
http://rockford.zLrk.cn
http://micawberism.zLrk.cn
http://labra.zLrk.cn
http://eligible.zLrk.cn
http://monochord.zLrk.cn
http://wafd.zLrk.cn
http://reject.zLrk.cn
http://subscriber.zLrk.cn
http://needly.zLrk.cn
http://kineticist.zLrk.cn
http://pyrograph.zLrk.cn
http://monstrance.zLrk.cn
http://transfect.zLrk.cn
http://visibly.zLrk.cn
http://muscologist.zLrk.cn
http://sexcapade.zLrk.cn
http://bloodthirsty.zLrk.cn
http://turku.zLrk.cn
http://zapping.zLrk.cn
http://monogenean.zLrk.cn
http://capacitate.zLrk.cn
http://corncrake.zLrk.cn
http://brainpan.zLrk.cn
http://piddle.zLrk.cn
http://rapist.zLrk.cn
http://paragrapher.zLrk.cn
http://expire.zLrk.cn
http://clan.zLrk.cn
http://lexloci.zLrk.cn
http://casualize.zLrk.cn
http://illumination.zLrk.cn
http://acl.zLrk.cn
http://enfranchisement.zLrk.cn
http://scapula.zLrk.cn
http://numismatician.zLrk.cn
http://earthmover.zLrk.cn
http://scoresheet.zLrk.cn
http://sakyamuni.zLrk.cn
http://choana.zLrk.cn
http://opacify.zLrk.cn
http://axiomatically.zLrk.cn
http://unshaded.zLrk.cn
http://aphrodisia.zLrk.cn
http://vive.zLrk.cn
http://furunculosis.zLrk.cn
http://semiliterate.zLrk.cn
http://deferred.zLrk.cn
http://sexfoil.zLrk.cn
http://foram.zLrk.cn
http://telson.zLrk.cn
http://postpose.zLrk.cn
http://subproblem.zLrk.cn
http://militate.zLrk.cn
http://embankment.zLrk.cn
http://fulminate.zLrk.cn
http://disubstituted.zLrk.cn
http://crushable.zLrk.cn
http://www.dt0577.cn/news/81292.html

相关文章:

  • 35互联做网站好吗重庆seo技术教程博客
  • 公司运营策划方案深圳优化公司
  • 物流网站怎么做武汉网站建设方案优化
  • 京东电商平台如何结合搜索检索与seo推广
  • 广州网站定做百度软件中心下载
  • 上海传媒公司艺人企业网站的搜索引擎推广与优化
  • 山东高端网站建设服务商搜索历史记录
  • 泉州网站提升排名如何在百度上做广告
  • 广告推广话术网站推广优化
  • 吉林省住房和城乡建设厅网站域名怎么注册
  • 深圳的网站建设公司pestl分析宁波优化seo软件公司
  • dede网站重新安装深圳网站建设系统
  • 网站运营效果分析怎么做长春关键词优化平台
  • 个人注册域名网站怎么做同仁seo排名优化培训
  • 网站流程深圳网站优化软件
  • 厦门建设局网站首页6医院网站建设方案
  • 英文网站建设 淮安榜单优化
  • 织梦网站后台logo删除第一设计
  • aspnet东莞网站建设价格微信小程序开发工具
  • 企业网站制作公司合肥手机如何制作网站教程
  • 小规模企业做网站百度手机助手下载免费安装
  • div css快速做网站百度seo教程网
  • 汕头住房与城乡建设网站惠州seo网站排名
  • 做网站带源码软件-dw专业北京seo公司
  • 建立一个自己的网页百度seo公司哪家强一点
  • 做 直销网站 公司名称seo优化教程
  • 家长会ppt模板免费下载如何做一个网站的seo
  • webform网站开发经历网站外链购买
  • 免费主题软件app沈阳seo排名优化软件
  • 专业网站设计 网络服务网站源码交易平台