我刚刚开始使用 Haskell。我正在尝试创建一个模仿 Haskell 中标准 replicate
函数的函数,但使用递归。例如,
Prelude> replicate 3 "Ha!"
["Ha!","Ha!","Ha!"]
它应该是
Int -> a -> [a]
类型。到目前为止,我有:myReplicate :: Int -> a -> [a]
myReplicate x y = y : myReplicate (x-1) y
myReplicate 0 y = [ ]
但是,我的函数总是生成无限列表:
Prelude> myReplicate 3 "Ha!"
["Ha!","Ha!","Ha!","Ha!","Ha!","Ha!","Ha!",...
最佳答案
你必须把第二个案例放在第一个之前,否则它永远不会进入第二个案例。
myReplicate :: Int -> a -> [a]
myReplicate 0 y = [ ]
myReplicate x y = y : myReplicate (x-1) y
关于Haskell:递归复制功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30958914/