【问题标题】:Generate a stream of all possible numbers `x^k*y^l` for given `k` and `l` in Haskell在 Haskell 中为给定的 `k` 和 `l` 生成所有可能的数字 `x^k*y^l` 的流
【发布时间】:2023-02-07 01:28:57
【问题描述】:

生成函数generateExponents k l,对于给定的 k 和 l,它会按递增顺序生成所有唯一可能数字 x^k*y^l 的流。例如generateExponents 2 3 = [1,4,8,9,16,25,27...]

出于明显的原因,这不起作用:

generateExponents k l = sort [x^k*y^l | x <- [1..], y <- [1..]]

然后我试了这个,这也不起作用:

generateExponents k l = [n | n <- [1 ..], n `elem` products n]
  where
    xs n = takeWhile (\x -> x ^ k <= n) [1 ..]
    ys n = takeWhile (\y -> y ^ l <= n) [1 ..]
    products n = liftA2 (*) (xs n) (ys n)

我究竟做错了什么?

【问题讨论】:

    标签: function haskell stream


    【解决方案1】:

    我想你只是忘了将实际功能映射到 xsys 上:

    generateExponents k l = [n | n <- [1 ..], n `elem` products n]
      where
        xs n = takeWhile (<= n) $ map (^ k) [1 ..]
        ys n = takeWhile (<= n) $ map (^ l) [1 ..]
        products n = liftA2 (*) (xs n) (ys n)
    

    【讨论】:

    • 你的建议解决了它。谢谢你!
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多