gpt4 book ai didi

haskell - 实现 Haskell 对数函数

转载 作者:行者123 更新时间:2023-12-02 21:23:19 25 4
gpt4 key购买 nike

我尝试实现对数算法,但它似乎处于循环中

loga_b :: Int -> Int -> Int
loga_b a b
| b == 1 = 0
| b == a = 1
| otherwise = 1 + loga_b (b `div` a) b

最佳答案

您在上一种情况下切换了参数 - 试试这个:

loga_b :: Int -> Int -> Int
loga_b a b
| b == 1 = 0
| b == a = 1
| otherwise = 1 + loga_b a (b `div` a)

示例:

λ> loga_b 2 8
3
λ> loga_b 2 17
4

备注

你真的不需要第二种情况:

loga_b :: Int -> Int -> Int
loga_b a b
| b == 1 = 0
| otherwise = 1 + loga_b a (b `div` a)

如果b == a,那么最后一种情况将计算为相同的1:

1 + loga_b a (a `div` a) 
= 1 + loga_b a 1
= 1 + 0
= 1

总计

正如 Sassa 提到的,这是一个部分功能,我不确定您希望如何正确修复它,但我认为这应该没问题:

loga_b :: Int -> Int -> Int
loga_b a b
| b < 0 || a < 0 = signum a * signum b * loga_b (abs a) (abs b)
| b < a = 0
| b >= a = 1 + loga_b a (b `div` a)

注意这将注意对负数给出合理行为我知道 - 但我确信如果OP真的需要它他可以自己思考所有的情况;)

关于haskell - 实现 Haskell 对数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26277353/

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