let makeIdGenerator startvalue =
let index : uint64 ref = ref startvalue
fun() ->
let result = !index
index := !index + 1UL
result
Что мне нужно - это генератор для функции, которая имеет тип unit -> uint64
, как показано выше.Есть ли более идиоматический способ генерации бесконечной последовательности uint64?
Приведенный выше код работает, но использует контрольную переменную для запоминания состояния генератора.
Пытается использовать бесконечную последовательность, как в Seq.initInfinite (fun i -> i)
, не работает, так как последовательность использует uint32
для своего состояния.
Кто-нибудь здесь знает способ сделать это даже без ссылочной переменной? Может быть, путем рекурсии и урожайности?
Заранее спасибо.
Вероятно Я не правильно задаю вопрос, но что не так с 'Seq.initInfinite uint64' –
@olodnad лямбда для генерации значения последовательности в индексе i вызывается с 32-битным параметром. Вы не можете создать 2^64 элемента последовательности с этим. Только 2^32. – BitTickler
Если вам нужно использовать аннотацию типа лямбда-добавления в лямбда. Например: '(fun (i: uint64) -> i)' – Petr