gpt4 book ai didi

function - Haskell函数返回一个数的所有幂直到给定的最大值

转载 作者:行者123 更新时间:2023-12-04 00:53:37 24 4
gpt4 key购买 nike

我正在创建一个函数,返回 n 的所有小于或等于最大值的幂。例如:powers 2 5 --> [1,2,4].

myPowers n = n : map (* n) (myPowers n) 

powers :: Int -> Int -> [Int]
powers n max = takeWhile (< max) (myPowers n)

目前 powers 返回的数字太少。例如:powers 2 6 应返回 3 个数字,但返回的是 2 个数字。

最佳答案

问题是你的 myPowers函数以 n 开头, 而不是 1 .例如:

Prelude> take 10 $ myPowers 2
[2,4,8,16,32,64,128,256,512,1024]

我们可以解决这个问题:

myPowers n = <b>1</b> : map (* n) (myPowers n)

请注意,您可以使用 iterate :: (a -> a) -> a -> [a] 提高计算效率,因此您可以将其定义为:

myPowers n = iterate (n*) 1

您应该使用 <= 检查边界如果您想要允许等于边界的权力:

powers n max = takeWhile (<b><=</b> max) (myPowers n)

然后我们获得示例输出,如:

Prelude> powers 2 5
[1,2,4]
Prelude> powers 2 6
[1,2,4]
Prelude> powers 2 10
[1,2,4,8]
Prelude> powers 3 10
[1,3,9]
Prelude> powers 3 30
[1,3,9,27]
Prelude> powers 5 30
[1,5,25]

关于function - Haskell函数返回一个数的所有幂直到给定的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49700581/

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