假设我被赋予了两个功能:
f :: [a] -> b
g :: [a] -> c
我想编写一个与此等效的函数:
h x = (f x, g x)
但是当我这样做时,对于大型列表,我不可避免地会耗尽内存。
一个简单的例子如下:
x = [1..100000000::Int]
main = print $ (sum x, product x)
我理解是这种情况,因为列表x
被存储在内存中而没有被垃圾收集。它会更好,而不是f
在g
“x
并行”中工作。
假设我不能更改f
and g
,也不想制作一个单独的副本x
(假设x
生产成本很高),我该如何编写h
而不遇到内存不足的问题?