gpt4 book ai didi

haskell - 如何计算 guard 语句在递归中发生的次数?

转载 作者:行者123 更新时间:2023-12-02 08:00:39 24 4
gpt4 key购买 nike

我是 haskell 的新手,我被困在我试图制作的一个小程序中。我想计算我的 guard 语句在所有递归轮次中经过的次数,然后将其作为 Int 返回。例如,如果 c1'a'c2'b'g2 并且 s"aaabbb" 然后返回的 int 将是 2,因为我的 guard 语句在 2 种情况下为真。

我尝试创建变量 x ,然后在每次出现 guard 语句时向其添加 x + 1 。这没有用,因为我了解到在 Haskell 中您设置的变量始终是静态的,因此例如在开始时设置 x = 0 会将 x 设置为 0 每次递归。

这是我的代码:

gaps :: (Char, Char) -> Int -> String -> Int
gaps (c1,c2) g (s:xs)
| c1 == s && c2 == (s:xs) !! g = --Count how many times this statement happens --
| otherwise = gaps (c1,c2) g xs

最佳答案

只需添加1并递归调用该函数

gaps :: (Char, Char) -> Int -> String -> Int
gaps _ _ [] = 0 -- base case
gaps (c1,c2) g (s:xs)
| c1 == s && c2 == (s:xs) !! g = 1 + gaps (c1,c2) g xs -- add one to final result
| otherwise = gaps (c1,c2) g xs

> gaps ('a','b') 2 "aaabbb"
2
> gaps ('a','b') 3 "aaaabbbb"
3

使用 !! 时要小心。如果您的输入字符串的 c1 值小于字符串末尾之前的 g 位置

,则它不是完整的并且可能会失败
> gaps ('a','b') 3 "aaaababbb" -- doesn't fail
3
> gaps ('a','b') 3 "aaaabbabb" -- does fail!!!!

关于haskell - 如何计算 guard 语句在递归中发生的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57818586/

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