【发布时间】:2021-12-14 15:32:32
【问题描述】:
我正在尝试在 Haskell 中编写一个函数,它执行以下操作: 您输入一个整数列表,对于这些整数,使用 map,有一个函数应用于它们,返回这些整数的无限列表。然后,我想使用 union 将 foldr 应用于列表列表,以便结果将是列表中这些列表的并集。
现在的问题是,当我例如取 10 'function' [1,2] 时,它会首先计算 1 的无限列表,因为它是一个无限列表,所以它永远不会为 2 这样做。所以它只返回输入列表中第一个元素的这个无限列表的前 10 个元素,并对其应用联合,这就是同一个列表。
我的问题是:有没有办法同时为输入列表中的所有元素创建无限列表,这样当我以 10 'function' [1,2] 为例时,它会返回1 和 2 的无限列表并集的前 10 个元素。 (不知道输入列表的元素个数)
这是我的代码,为了更清楚:
pow :: Integer -> [Integer]
pow n = map (^n) [1, 2..]
function :: [Integer] -> [Integer]
function xs = foldr union [] (map pow xs)
【问题讨论】:
标签: list haskell functional-programming fold