有没有办法在PureScript中模拟未知长度的匹配数组?作为一个例子,这是我如何List在Haskell中使用它:
addFirstTwo :: (Num a) => [a] -> a
addFirstTwo (x:y:_) = x + y
Run Code Online (Sandbox Code Playgroud)
我在PureScript中尝试了类似的东西(使用Array a而不是[a]),但是出现了以下错误:
运算符Data.Array.(:)不能在模式中使用,因为它是函数Data.Array.cons的别名.只能在模式中使用数据构造函数的别名.
我知道我可以List在PureScript中使用s而不是Arrays,但我想将模式与数组匹配.在阅读PureScript by Example的Array模式匹配部分后,我没有看到如何执行此操作.
rig*_*old 11
数组缺点模式早已从语言中删除.您可以改为使用unconsfrom Data.Array,如下所示:
case uncons xs of
Just {head: x, tail} ->
case uncons tail of
Just {head: y, tail: _} -> x + y
Nothing -> 0
Nothing -> 0
Run Code Online (Sandbox Code Playgroud)
但要注意的是uncons∈ Θ(N) .
或者您可以使用take从Data.Array:
case take 2 xs of
[a, b] -> a + b
_ -> 0
Run Code Online (Sandbox Code Playgroud)
take∈ Θ(分钟(N,M)) (在这种情况下M = 2).
甚至(!!)来自Data.Array:
case xs !! 0, xs !! 1 of
Just x, Just y -> x + y
_, _ -> 0
Run Code Online (Sandbox Code Playgroud)
通常,列表比数组更令人愉快.