Haskell中的n个零列表

时间:2016-04-03 15:40:47

标签: list haskell list-comprehension

这可能很容易,但我无法弄清楚如何做相当于Python的

[0]*n

在Haskell中,为了获得一个包含n个零的列表。

[0]*n

不起作用。我是否有义务做类似的事情:[0 | x <-[1..5]]

3 个答案:

答案 0 :(得分:8)

你可以这样做:

λ> replicate 5 0
[0,0,0,0,0]

或者@obadz指出,这更简洁:

*

我个人不喜欢python语法。 {{1}}表示乘法,但在您的情况下它会执行其他操作。但这只是我的意见:)。

答案 1 :(得分:0)

另一种可能性:

import Data.Monoid

zeroes = 5 * [0] where (*) = mtimes

答案 2 :(得分:-1)

您可以自己定义(作为玩具示例)

(*) :: [a] -> Int -> [a]                     
(*) xs n = take n $ cycle xs

所以你可以拥有

Prelude> [0]*5                                                      
[0,0,0,0,0]

Prelude> [0,1]*5
[0,1,0,1,0]
显然,通过重新定义现有的运营商有&#34;副作用&#34;

Prelude> 4*4

<interactive>:169:1:
    Non type-variable argument in the constraint: Num [a]
    (Use FlexibleContexts to permit this)
    When checking that `it' has the inferred type
      it :: forall a. Num [a] => [a]

或者python解释会将列表复制n次(而不是从循环列表元素中选取n个元素)。在这种情况下,您可以将其定义为

(*) :: [a] -> Int -> [a]                                                                                 
(*) xs n = concat $ replicate n xs                                                                       


Prelude> [0]*4                                                                                                        
[0,0,0,0]

Prelude> [0,1]*4                                                                                                      
[0,1,0,1,0,1,0,1]
显然,这是一个玩具示例,你可能想要定义另一个操作符或只是一个函数。