【发布时间】:2014-09-21 20:40:56
【问题描述】:
这个问题是关于函数式编程的。示例代码在 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) )
这已经变得复杂了,但仍然可以解决。
但问题是:我该如何重写下面这段代码?
let lmapped = [ for x in l do
let res = f x
yield res + 1 ]
if List.isEmpty lmapped then
...
有没有简单的方法来重写它? (可能避免显式递归函数,例如“let rec ...”)谢谢
【问题讨论】:
标签: f# functional-programming ocaml