簡體   English   中英

通過Haskell中的列表復制

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

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