Почему простые выражения цикла ограничены целочисленными диапазонами?
Согласно спецификации F # (см. §6.5.7), простые циклы for ограничены целым числом (int
акаint32
ака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
выражения?