0

我正在尝试递归调用一个函数,该函数将任何类型复制指定次数,例如 copy 3 'a' 会给我 ['a','a','a'] 而 copy 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]

4

1 回答 1

2

这只是关于如何以更简单的方式实现您的功能的建议。您正在尝试实现标准replicate功能并查看标准源代码总是有帮助的。这是复制的代码(简化后)

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

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

于 2013-10-18T18:48:23.633 回答