【发布时间】:2010-10-28 11:37:27
【问题描述】:
以这个示例代码为例(暂时忽略它非常低效)
let listToString (lst:list<'a>) = ;;' prettify fix
let rec inner (lst:list<'a>) buffer = ;;' prettify fix
match List.length lst with
| 0 -> buffer
| _ -> inner (List.tl lst) (buffer + ((List.hd lst).ToString()))
inner lst ""
这是我在 F# 中经常遇到的一种常见模式,我需要一个内部函数,它在某个值上递归自身 - 我只需要这个函数一次,有没有可能从其中调用 lambda自我(一些神奇的关键字或什么)?我希望代码看起来像这样:
let listToString2 (lst:list<'a>) = ;;' prettify fix
( fun
(lst:list<'a>) buffer -> match List.length lst with ;;' prettify fix
| 0 -> buffer
| _ -> ##RECURSE## (List.tl lst) (buffer + ((List.hd lst).ToString()))
) lst ""
但正如您可能期望的那样,无法在其内部引用匿名函数,这是我放置##RECURSE##的地方所需要的
【问题讨论】:
标签: recursion lambda functional-programming f# fixpoint-combinators