我想预先计算一些在我需要进一步查找时使用的值。我想出了以下内容:
let lc = lcgen "some sentence with a lot of words"
lc 0 0 -- == 4
lc 0 1 -- == 13
该函数实质上返回两个单词之间使用的字符数。我用它如下:
lengths
在此实现中,for colour in colours:
print("{}:\t {}".format(colour, quantities[colour]))
向量是否会被记忆化?此外,我如何知道和/或确认这一点?
答案 0 :(得分:1)
在这种情况下,lengths
显然无法被记忆,因为它取决于外部函数的参数,这就是每次调用该函数时重新生成它的原因。
如果没有这种依赖,它本可以被记忆。要检查是否发生了这种情况,您可以使用评论中建议的方法之一。为了确保记忆确实发生,您可以使用标准方法使用NOINLINE
编译指示将所需的部分提取到顶级。如,
{-# NOINLINE lengths #-}
lengths :: Vector Int
lengths =
error "define me"
答案 1 :(得分:1)
如果您向lengths
添加trace
,请执行以下操作:
lengths = trace "building list..." $ V.fromList ...
每次计算lengths
值时,您都会看到输出
因为它只应按lc = lcgen s