Tome este código de ejemplo (ignorarlo siendo terriblemente ineficiente por el momento)lambdas recursivas en F #
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 ""
Este es un patrón común que repetidamente encontramos en Fa #, tengo que tener una función interna que recursivamente propio sobre algún valor, y solo necesito esta función una vez, ¿hay alguna forma de llamar a una lambda desde su interior (alguna palabra clave mágica o algo así)? Me gustaría que el código a ser algo como esto:
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 ""
Pero como era de esperar no hay manera de hacer referencia a la función anónima dentro de sí mismo, que es necesaria donde pongo ## RECURSE ##