このコード例を見てください (現時点では非常に非効率的であることは無視してください)。
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# で頻繁に発生する一般的なパターンです。ある値に対して自分自身を再帰する内部関数が必要です。この関数は 1 回だけ必要です。何らかの方法で、その内部からラムダを呼び出すことは可能ですか?魔法のキーワードか何か)?コードを次のようにしたいと思います。
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## を配置する場所で必要になります。