> let a = [| 'a'..'d' |];;
val a : char [] = [|'a'; 'b'; 'c'; 'd'|]
単純なスライスを行います:
> a.[1..2], [1..2];;
val it : char [] * int list = ([|'b'; 'c'|], [1; 2])
空の領域で試してみてください:
> a.[1..0], [1..0];;
val it : char [] * int list = ([||], [])
機能していて妥当なようです - 2 つの空のシーケンスが得られました。
しかし、ここでは失敗します:
> a.[5..0];;
System.OverflowException: Arithmetic operation resulted in an overflow.
at <StartupCode$FSI_0018>.$FSI_0018.main@()
Stopped due to error
もちろん、回避策はあり[| for i in [5..0] -> a.[i] |]
ます。しかし、私はなぜa.[5..0]
失敗するのかという点を見逃していますか? 空の配列を返さないのはなぜですか? そのような行動の理由はありますか?