基本的haskell:复制元素

时间:2013-10-18 18:35:12

标签: haskell

我试图以递归方式调用一个复制任何类型指定次数的函数 比如副本3'a'会给我['a','a','a']而副本3 2会给我[2,2,2] 这是我到目前为止,但我不确定我的类型行是否正确,因为我认为我的代码运行正常。任何人都可以看到什么是错的吗?

copy :: Int->a->[a]
copy x [] = []
copy y a = a:(copy (y-1) a)

编辑:更新到此:

copy :: Int->a->[a]
copy 0 a = [] 
copy y a = [a]++(copy (y-1) a)

然而,这给了我“aaa”而不是[a,a,a]

1 个答案:

答案 0 :(得分:2)

这只是关于如何以更加haskelly方式实现您的功能的建议。您正在尝试实现标准replicate函数,并查看标准源代码始终有用。这是复制的代码(简化后)

replicate n x = take n (repeat x)
repeat x = xs where xs = x : xs

源代码取自lambdabot在haskell irc上返回的简化src。