List Haskell中n个零的列表
这可能非常简单,但我不知道如何实现Python的等效功能List Haskell中n个零的列表,list,haskell,list-comprehension,List,Haskell,List Comprehension,这可能非常简单,但我不知道如何实现Python的等效功能 [0]*n 在Haskell中,为了得到一个包含n个零的列表 [0]*n 不起作用。我是否必须这样做:[0 | x您可以这样做: λ> take 5 (repeat 0) [0,0,0,0,0] 或者正如@obadz所指出的,这更为简洁: λ> replicate 5 0 [0,0,0,0,0] 我个人不喜欢python语法。*表示乘法,但在您的情况下它会做其他事情。但这只是我的观点:)。您可以自己定义它(作为一个玩具
[0]*n
在Haskell中,为了得到一个包含n个零的列表
[0]*n
不起作用。我是否必须这样做:[0 | x您可以这样做:
λ> take 5 (repeat 0)
[0,0,0,0,0]
或者正如@obadz所指出的,这更为简洁:
λ> replicate 5 0
[0,0,0,0,0]
我个人不喜欢python语法。*
表示乘法,但在您的情况下它会做其他事情。但这只是我的观点:)。您可以自己定义它(作为一个玩具示例)
所以你可以
Prelude> [0]*5
[0,0,0,0,0]
Prelude> [0,1]*5
[0,1,0,1,0]
显然,重新定义现有运营商会产生“副作用”
显然,这是一个玩具示例,您可能需要为此定义另一个运算符或简单的函数。另一种可能性:
import Data.Monoid
zeroes = 5 * [0] where (*) = mtimes
或者replicate 5 0
*
对列表和整数的作用是相同的;它是重复的加法。some_list*3==3*some_list==some_list+some_list+some_list
,其中列表加法只是串联。@n.m该评论是对Sibi关于Python语法的评论的回应。@chepner:这确实是一致的不幸的是,它与其他数值运算符的使用非常不一致。请考虑<代码> NoPy.Road([0)] * 3 < /COD>。我想我们将要讨论的问题是,运算符重载与特定类型运算符的扩散(或者甚至特定类型的函数)的利弊。.查看haskell标记信息页面,查找函数和其他有趣的内容:
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]
(*) :: [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]
import Data.Monoid
zeroes = 5 * [0] where (*) = mtimes