我知道如果我要在 Haskell 中计算平方列表,我可以这样做:
squares = [ x ** 2 | x <- [1 ..] ]
然后当我这样调用方块时:
print $ take 4 squares
它会打印出 [1.0, 4.0, 9.0, 16.0]。其计算结果为 [ 1 ** 2, 2 ** 2, 3 ** 2, 4 ** 2 ]。现在,由于 Haskell 是函数式的,并且每次的结果都是相同的,如果我在其他地方再次调用 squares,它会重新评估已经计算出的答案吗?如果我在调用前一行后重新使用 squares,它会重新计算前 4 个值吗?
print $ take 5 squares
它会评估 [1.0, 4.0, 9.0, 16.0, 5 ** 2] 吗?
在这种情况下,不会重新计算,因为列表实际上已构建,并且正方形列表在调用后继续存在。然而,Haskell 函数一般不会被记忆。这只适用于这样的情况,即您没有显式调用函数,只是探索(内)有限列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)