Возьмем этот пример кода (на данный момент игнорируем его ужасную неэффективность)
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 #, мне нужно иметь внутреннюю функцию, которая рекурсивно переходит к некоторому значению - и мне нужна эта функция только один раз, есть ли возможность вызвать лямбду из нее сам (какое-то волшебное ключевое слово или что-то)? Я хотел бы, чтобы код выглядел примерно так:
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 ##