这个问题是关于函数式编程的。示例代码在F#中。用延续传递风格重写f#函数
假设我有一个简单的函数f:
let f x =
x + 1
现在(的原因,我不想解释,涉及到线程),我必须转动F成函数与延续:
let f x cont =
cont (x+1)
现在我必须重写所有调用f的函数,这些函数将不再编译。
举例来说,如果我有这样的功能
let g x =
let res = f x
res + 2
我必须重写G作为
let g x cont =
f x (fun res ->
cont (res + 2))
这变得复杂了,但仍然是manaegable。
但问题是:如何重写下面的一段代码?
let lmapped = [ for x in l do
let res = f x
yield res + 1 ]
if List.isEmpty lmapped then
...
有没有简单的方法来重写它? (可能避免一个明确的递归函数,如“let rec ...”)谢谢