Dlaczego proste są wyrażenia pętli ograniczone do zakresów całkowitych?
Zgodnie ze specyfikacją F # (patrz§ 6.5.7), proste pętle są ograniczone liczbą całkowitą (int
znany jakoint32
znany jakoSystem.Int32
) limitystart
istop
, np.
for i = start to stop do
// do sth.
Zastanawiam się, dlaczego muszą być granice iteracji dla tego typu pętli forint32
. Dlaczego nie pozwolęuint32
? int64
? bigint
?
Wiem, że sekwencyjne wyrażenia iteracyjne (for ... in ...
) może iterować po dowolnych sekwencjach; wymaga to jednak przydzielenia iteratora i wywołaniaMoveNext
iCurrent
a co nie, a zatem może być znacznie mniej wydajne niż zwykła pętla (licznik przyrostowy, porównanie, skok warunkowy). Aby tego uniknąć, utkniesz przy użyciuwhile
i ręcznie zwiększając liczniki pętli ...
O dziwo, F #robi zezwalać na nieint32
granice pętli, jeślifor
wyrażenie jest zawinięte w wyrażenie sekwencji, np.
seq { for i = 0I to 10I do
printfn "%A" i }
Tak więc myślę, że pytanie brzmi: czy istnieje jakiś szczególny powód, dla którego można tylko pozwolićint32
na pętle? I dlaczego to ograniczenie nie dotyczyfor
zapętlone pętleseq
wyrażenia?