[英]list of n zeros in Haskell
這可能很容易,但我無法弄清楚如何做相當於Python的
[0]*n
在Haskell中,為了得到一個帶有n個零的列表。
[0]*n
不起作用。 我不得不做類似的事情: [0 | x <-[1..5]]
[0 | x <-[1..5]]
?
你可以這樣做:
λ> take 5 (repeat 0)
[0,0,0,0,0]
或者@obadz指出,這更簡潔:
λ> replicate 5 0
[0,0,0,0,0]
我個人不喜歡python語法。 *
表示乘法,但它會在您的情況下執行其他操作。 但那只是我的個人意見 :)。
另一種可能性
import Data.Monoid
zeroes = 5 * [0] where (*) = mtimes
你可以自己定義(作為一個玩具示例)
(*) :: [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]
顯然,通過重新定義現有的運營商有“副作用”
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]
顯然,這是一個玩具示例,你可能想要定義另一個操作符或簡單的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.