範圍
使用範圍表示法建立從 1 到 10 的列表很簡單:
[1..10] -- [1,2,3,4,5,6,7,8,9,10]
要指定步驟,請在 start 元素後新增逗號和下一個元素:
[1,3..10] -- [1,3,5,7,9]
請注意,Haskell 始終將步驟作為術語之間的算術差異,並且你不能指定多於前兩個元素和上限:
[1,3,5..10] -- error
[1,3,9..20] -- error
要按降序生成範圍,請始終指定否定步驟:
[5..1] -- []
[5,4..1] -- [5,4,3,2,1]
因為 Haskell 是非嚴格的,所以只有在需要時才會評估列表的元素,這允許我們使用無限列表。[1..]
是從 1 開始的無限列表。此列表可以繫結到變數或作為函式引數傳遞:
take 5 [1..] -- returns [1,2,3,4,5] even though [1..] is infinite
使用具有浮點值的範圍時要小心,因為它接受溢位超過半增量,以抵禦舍入問題:
[1.0,1.5..2.4] -- [1.0,1.5,2.0,2.5] , though 2.5 > 2.4
[1.0,1.1..1.2] -- [1.0,1.1,1.2000000000000002] , though 1.2000000000000002 > 1.2
範圍不僅可以使用數字,還可以使用任何實現 Enum
型別類的型別。給定一些可列舉的變數 a
,b
,c
,範圍語法相當於呼叫這些 Enum
方法:
[a..] == enumFrom a
[a..c] == enumFromTo a c
[a,b..] == enumFromThen a b
[a,b..c] == enumFromThenTo a b c
例如,使用 Bool
就可以了
[False ..] -- [False,True]
注意 False
之後的空格,以防止將其解析為模組名稱限定(即 False..
將從模組 False
解析為 .
)。