簡體   English   中英

Haskell中的n個零列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM