如何在不使用复制或重复功能的情况下将元素放入列表中n次?

时间:2016-05-01 14:22:08

标签: haskell

我有一个函数代表,需要一个int的列表。我现在的任务是将这些数字中的每一个放在单独的列表中,其数量是n倍。例如 [1,3,5][[1],[3,3,3],[5,5,5,5,5]]到目前为止,我可以将每个int放在一个单独的列表中,但我现在还不知道如何在列表中放置n次而不使用复制或重复。

这是我到目前为止的代码:

rep [] = []
rep (x1:xs) = [[x1]] ++ (rep xs)

2 个答案:

答案 0 :(得分:2)

由于这是一项家庭作业/学习练习 - 只想提供一些提示

将任务分为两部分

  • myReplicate :: Int -> a -> [a]复制单个元素的次数与Int告诉的次数相同。

    myReplicate n x | n > 0 = ...
                    | n == 0 = ...
                    | n < 0 = error "Error myReplicate: no negative arguments allowed"
    
  • 第二个函数myMap :: (a -> b) -> [a] -> [b],它将函数应用于给定列表的每个元素。

    myMap :: (a -> b) -> [a] -> [b]
    myMap f [] = []
    myMap f (x:xs) = ...
    

然后rep = myMap (\x -> myReplicate x x)

答案 1 :(得分:0)

这是一个没有$mail->AddAddress($email, "John Doe"); repeat的解决方案:

replicate