我试图以递归方式调用一个复制任何类型指定次数的函数 比如副本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]
答案 0 :(得分:2)
这只是关于如何以更加haskelly方式实现您的功能的建议。您正在尝试实现标准replicate
函数,并查看标准源代码始终有用。这是复制的代码(简化后)
replicate n x = take n (repeat x)
repeat x = xs where xs = x : xs
源代码取自lambdabot在haskell irc上返回的简化src。