拿這個例子的代碼(忽略它是暫時效率極其低下)遞歸lambda表達式
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 ##