[英]Replicating through a list in Haskell
replicatee :: [a] -> Int -> [a]
replicatee [] _ = []
replicatee xs 0 = []
replicatee (x:xs) n = x:replicatee (x:xs) (n-1): replicatee xs n
所以這是我的代碼,用於將列表中的元素復制n次,編譯器一直顯示錯誤:
Couldnt match type 'a'with [a], I'm seriously confused, please help out.
編輯:我想要我的功能要做的是:復制[1,2,3,4] 2
[1,1,2,2,3,3,4,4]
我可能誤解了您的意圖,但也許您的意思是這樣的:
replicatee :: a -> Int -> [a]
replicatee _ 0 = []
replicatee x n = x:replicatee x (n-1)
replicatee :: [a] -> Int -> [a]
replicatee [] _ = []
replicatee xs 0 = []
replicatee (x:xs) n = x:replicatee (x:xs) (n-1): replicatee xs n
問題在於, replicatee
返回了[a]
類型的值,但是您嘗試使用(:) :: a -> [a] -> [a]
將其添加到[a]
類型的另一個列表中。 從類型檢查的角度來看,您需要使用(++)
,而不是(:)
:
replicatee xs'@(x:xs) n = x : (replicatee xs' (n-1) ++ replicatee xs n)
它是否符合您的預期是另一回事。 根據您的描述, Mikkel提供了正確的答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.