这可能很容易,但我无法弄清楚如何做相当于Python的
[0]*n
在Haskell中,为了获得一个包含n个零的列表。
[0]*n
不起作用。我是否有义务做类似的事情:[0 | x <-[1..5]]
?
答案 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]
显然,这是一个玩具示例,你可能想要定义另一个操作符或只是一个函数。