Учитывая список [1, 2] Я пытаюсь создать анонимную функцию, которая генерирует кортеж (следующее значение * функция, которая генерирует следующее значение) ... что-то вроде
f = createFunc([1; 2])
(v1, f1) = f() //v1 = Some 1
(v2, f2) = f1() //v2 = Some 2
(v3, f3) = f2() //v3 = None
Я могу сделать это достаточно легко в Эликсире, но я бьюсь головой о стену в F #. Любые указатели с благодарностью получили. Моя попытка пока выглядит так:
let top_and_tail (l: list<'a>): (Option<'a> * list<'a>) =
match l with
| [] -> (None, [])
| h :: t -> ((Some h), t)
let rec createFun l =
fun() ->
let (h, t) = top_and_tail(l)
(h, createFun(t))