簡體   English   中英

在列表中將字符串乘以Haskell

[英]Multiplying String in a list, Haskell

我正在嘗試將列表中的字符串相乘。 例如,當我有一個類似["hello","World"]的列表["hello","World"]並且想要將它“乘以2”時,我想以["hello","hello","World","World"]結尾["hello","hello","World","World"]

這是我想出的:

rep :: Int -> [String] -> [String]
rep n [] = []
rep n [x:xs] = replicate n [x] ++ rep n [xs]

但這給了我例外:

(298,1)-(299,44):函數rep中的非窮舉模式

我是這種語言的新手,我不知道如何進行整理。 你能幫我嗎?

  • 您的第一個問題是非空列表的模式是錯誤的,應該是(x:xs) ,而不是[x:xs]
  • 此外, 復制期望單個元素並將其轉換為長度為n的列表,因此應replicate nx ,而不replicate n [x]
  • 類似地, xs已經是一個列表。

如果解決了所有這些問題,將得到以下結果,這些結果實際上可以按預期工作:

rep :: Int -> [String] -> [String]
rep n [] = []
rep n (x:xs) = replicate n x ++ rep n xs

也就是說,可以使用多種不同的方式編寫此代碼,例如使用concatMap

rep n = concatMap (replicate n)

要么

rep = concatMap . replicate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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