我刚刚开始使用 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/

10-11 00:33