小编use*_*624的帖子

如何在 Haskell 中实现状态图?

在阅读了 Miro Samek 的优秀著作《Practical UML Statecharts in C/C++》之后,我迫不及待地想尝试一下。最近,我开始自学 Haskell 和函数式编程。

\n

在我关于 Haskell 的书刚读了几章后,我就突然意识到状态图可能很困难,甚至与 Haskell 的风格背道而驰。毕竟,创建无状态程序需要付出巨大的努力,或者至少将代码的所有不纯部分与纯代码部分很好地分开。

\n

当我在网上搜索“Haskell”结合“statechart”时,我几乎什么也没找到!这激起了我的好奇心。毕竟,Haskell 是一种相当古老的通用编程语言。怎么可能\n似乎几乎没有与状态图相关的活动?

\n

Haskell 的 Reddit 子主题“ haskeller 对状态图的思考”中提出了几种可能的解释,我希望我的简短摘录不会扭曲任何作者的观点:

\n
    \n
  1. /\xe2\x80\xa6/ Haskell 社区总体上在 UI 开发方面不是很活跃 /\xe2\x80\xa6/

    \n
  2. \n
  3. /\xe2\x80\xa6/ 状态图的缺点是它们提供的所有灵活性\n使得模型检查(以及基于模型的\n测试)变得更加困难。/\xe2\x80\xa6/

    \n
  4. \n
  5. /\xe2\x80\xa6/ 状态机是状态和转换规则的集合。但由于实现状态是多余的,您可以单独使用转换规则,这些规则被整齐地表示为(相互递归的)函数族。/\xe2\x80\xa6/ 但 Haskell 不受此限制,因此显式实现状态机通常是多余的。

    \n

    Hense(原文如此!),作为一名 Haskeller,我大多数时候并不真正需要显式状态机。作为一等公民和 TCO 的功能,在最好的情况下是一个实施细节,在最坏的情况下是不需要的。/\xe2\x80\xa6/

    \n
  6. \n
  7. A。/\xe2\x80\xa6/ 在 Haskell 生态系统中,你可能会更幸运地使用“转换系统”、“演员模型”或“状态转换器”等搜索词。/\xe2\x80\xa6/

    \n

    b. /\xe2\x80\xa6/ 函数反应式编程 (FRP) 和箭头是 Haskell 中\n实现信号流的方法。/\xe2\x80\xa6/

    \n

    C。/\xe2\x80\xa6/ State monad 转换器可以对此进行建模。如果中间步骤中有\n外部信号,则可以\n将其嵌入\n延续 monad 中。/\xe2\x80\xa6/

    \n
  8. \n
\n

我允许自己解释一下,并对此进行评论:

\n
    \n
  1. 我发现 H. …

haskell state-machine statechart

5
推荐指数
1
解决办法
343
查看次数

标签 统计

haskell ×1

state-machine ×1

statechart ×1