gpt4 book ai didi

haskell - 递归未终止

转载 作者:行者123 更新时间:2023-12-02 10:28:16 25 4
gpt4 key购买 nike

我有以下问题。我的目标是实现返回 Char n

的函数
GHCi> nTimes 42 3
[42,42,42]
GHCi> nTimes 'z' 5
"zzzzz"

我已经实现了这样的解决方案,但递归没有结束

nTimes:: a -> Int -> [a]
nTimes a n = a : nTimes a (n-1)

函数只是返回一个不可阻挡的数字Chars提前致谢,

最佳答案

为了停止递归,您需要一个基本情况。不会再次进行递归调用的情况。但是,您的 nTimes 没有基本情况。为什么nTimes 'z' 0会被特殊对待?根据您的程序,这只是一个与其他情况一样的情况。它将在列表前面添加 a,并使用 nTimes a (-1) 进行递归调用。

因此,您可以实现一个基本案例,例如使用守卫:

nTimes:: a -> Int -> [a]
nTimes a n
| <b>n <= 0 = []</b>
| otherwise = a : nTimes a (n-1)

因此,如果 n 小于或等于 0,我们将返回一个空列表。在otherwise情况下(n > 0),我们因此产生a,然后递归nTimes a (n-1).

如果我们使用 nTimes 'z' 5 进行测试,我们会得到:

Prelude> nTimes 'z' 5
"zzzzz"

您在这里实现了 replicate :: Int -> a -> [a] 的“翻转”版本函数,因此您可以简单地将其写为nTimes = Flipreplicate

关于haskell - 递归未终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61829048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com