Почему простые выражения цикла ограничены целочисленными диапазонами?

Согласно спецификации F # (см. §6.5.7), простые циклы for ограничены целым числом (int акаint32 акаSystem.Int32) пределыstart а такжеstopнапример,

for i = start to stop do
    // do sth.

Интересно, почему итерационные границы для этого типа цикла for должны бытьint32, Почему бы не позволить? ? ?Я'uint32int64bigint

Я знаю, что последовательность итерационных выражений (for ... in ...) может перебирать произвольные последовательности; что, однако, требует выделения итератора и вызоваMoveNext а такжеCurrent и то, что не так и может, таким образом, быть значительно менее эффективным, чем простой цикл (счетчик приращений, сравнение, условный переход). Чтобы избежать этого, вы застряли с использованиемwhile и вручную увеличивающие счетчики цикла ...

Как ни странно, F #делает разрешитьint32 границы цикла, еслиfor выражение упаковывается в выражение последовательности, например

seq { for i = 0I to 10I do
        printfn "%A" i }

Итак, я предполагаю, что вопрос: есть ли конкретная причина дляint32 для петель? И почему это ограничение не распространяется наfor петли, завернутые вseq выражения?

Ответы на вопрос(3)

Ваш ответ на вопрос