请看以下示例代码(暂时忽略其效率低下的问题):
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##处使用它。