Functional programming 如何编写单子?

Functional programming 如何编写单子?,functional-programming,monads,Functional Programming,Monads,假设我有一个永远递归的函数,我知道的最简单的函数是: fx=fx 如何编写一个修改此函数行为的单子,使其给出x的值,以及计算下一步的延续,包括该步的x值和延续…您可以将其结构如下(使用Haskell进行说明): 具有明显的monad实现 但是,由于b是在ToDo构造函数中存在类型的,因此您将无法对这些中间结果进行太多处理。事实上,我不认为这会给你更多的信息,仅仅是简单的旧的偏袒的单子 data Partial a = Now a | Later (Partial a) 你熟悉延续单子吗?有点,

假设我有一个永远递归的函数,我知道的最简单的函数是:

fx=fx


如何编写一个修改此函数行为的单子,使其给出x的值,以及计算下一步的延续,包括该步的x值和延续…

您可以将其结构如下(使用Haskell进行说明):

具有明显的monad实现

但是,由于
b
是在
ToDo
构造函数中存在类型的,因此您将无法对这些中间结果进行太多处理。事实上,我不认为这会给你更多的信息,仅仅是简单的旧的偏袒的单子

data Partial a = Now a | Later (Partial a)

你熟悉延续单子吗?有点,但我不太懂。因此,我要求提供一个简单的示例,演示如何将递归函数转换为我可以使用的函数。@user2800708您使用的是什么编程语言?我使用的是标准的ML,谢谢。事实上,我最终使用的是偏袒monad-我只是直到现在才知道调用了什么。唯一的区别是,我通过在后面加(()->部分a)使它变懒,因为ML不像Haskell那样懒。非常有用的回答,谢谢。
data Partial a = Now a | Later (Partial a)