在Haskell中表示流程图指定的算法

hvr*_*hvr 6 haskell

我面临着实现以流程图表示的算法(主要是业务逻辑风格)的任务.我知道流程图不是最好的算法表示,因为它的意大利面条代码属性(这是CPS的用例吗?),但我坚持使用表示为流程图的规范.

虽然我可以在实现它们之前将流程图转换为更合适的等效表示,但这可能会使得更难以"识别"生成的实现中的原始流程图,所以我希望有一些方法可以直接表示流程图算法(也许是monadic)Haskell中的EDSL,因此与原始流程图规范的相似性(更加)显而易见.

Vic*_*let 4

流程图的一种可能的表示是使用一组相互尾递归函数,将“转到步骤 X”翻译为“用状态 S 评估函数 X”。为了提高可读性,您可以将操作(更改状态的外部函数)和if/else有助于确定下一步要采取的步骤的模式匹配链组合到单个函数中。

当然,这是假设您的流程图是硬编码的(而不是在运行时从外部源加载)。