enumFromThenTo
from Enum型クラス
開始値、次の値、終了値を取り、その範囲とステップに従ってリストを生成
[x1,x2,..y]の糖衣構文
https://hackage.haskell.org/package/base-4.19.0.0/docs/Prelude.html#v:enumFromThenTo
定義
code:hs
enumFromThenTo :: a -> a -> a -> a
enumFromThenTo x1 x2 y = map toEnum fromEnum x1, fromEnum x2 .. fromEnum y
code:hs
-- 増加する場合は以下と同じ
enumFromThenTo x y z = takeWhile (<= z) $ iterate (+(y-x)) x
例
code:hs
enumFromThenTo 3 5 11 -- 3, 5, 7, 9, 11
code:hs
-- >>> f 3 20
-- 3,6,9,12,15,18
f x limit = x, x * 2 .. limit - 1
[~~ limit-1]だけ見ると、最後の要素が常にlimit-1になるように見えるが、そうではない
上記の例だと20-1=19が最後のようになりそうだが、実際は18
limit-1はtakeWhileの評価に使われるだけなので、常に最後の要素になるわけではない