Согласно спецификации F # (см. §6.5.7), простые для циклов ограничены целым числом (int
aka int32
aka System.Int32
) start
и stop
, например
for i = start to stop do
// do sth.
Интересно, почему ограничения итерации для этого типа цикла for должны быть int32
. Почему бы не позволить uint32
? int64
? bigint
?
Я знаю, что итерационные выражения последовательности (for ... in ...
) могут выполнять итерацию по произвольным последовательностям; что, однако, требует выделения итератора и вызова MoveNext
и Current
, а что нет и может быть значительно менее эффективным, чем простой цикл (приращение счетчика, сравнение, переход по условию). Чтобы этого избежать, вы застряли с использованием while
и счетчиков циклов с добавлением вручную...
Как ни странно, F # разрешает ограничения на int32
, если выражение for
обернуто в выражение последовательности, например
seq { for i = 0I to 10I do
printfn "%A" i }
Итак, я думаю, вопрос в том, есть ли конкретная причина только для того, чтобы разрешать int32
для циклов? И почему это ограничение не относится к циклам for
, заключенным в выражения seq
?