Julia 朱莉娅的回忆录

Julia 朱莉娅的回忆录,julia,memoization,Julia,Memoization,这是一个包裹,人们可以用它在朱莉娅身上进行记忆。它的@memoize宏创建一个字典。有办法查一下这本词典吗 例如,在我执行 @memoize f(n) = n ≤ 1 ? n : f(n-1) + f(n-1) @show f(10) 我想检查已经生成的f的中间值,因此f(0),f(1),…,f(10) 有人将其作为Memoize.jl的替代品或增强功能编写,以便进行定制和检查。但是,这个包似乎没有得到维护。Julia的一个优点是,像这样的包只是更多的Julia代码,而不是在C语言中做一些从

这是一个包裹,人们可以用它在朱莉娅身上进行记忆。它的
@memoize
宏创建一个字典。有办法查一下这本词典吗

例如,在我执行

@memoize f(n) = n ≤ 1 ? n : f(n-1) + f(n-1)

@show f(10)
我想检查已经生成的
f
的中间值,因此f(0),f(1),…,f(10)


有人将其作为Memoize.jl的替代品或增强功能编写,以便进行定制和检查。但是,这个包似乎没有得到维护。

Julia的一个优点是,像这样的包只是更多的Julia代码,而不是在C语言中做一些从主语言中无法发现的事情。而且
Memoize
的代码非常简单。看看:

这将告诉您缓存字典的名称,给定
f
作为正在被记忆的函数的名称。因此,在运行示例代码后,让我们尝试使用该名称访问变量:

julia> var"##f_memoized_cache"
IdDict{Any,Any} with 10 entries:
  (7,)  => 64
  (6,)  => 32
  (4,)  => 8
  (5,)  => 16
  (9,)  => 256
  (10,) => 512
  (2,)  => 2
  (8,)  => 128
  (1,)  => 1
  (3,)  => 4
瞧!这是实际的缓存。它只是一个
IdDict
,在与方法定义相同的模块中有一个奇怪的名称。
var“…”
语法是最近为带有“奇怪”名称的标识符添加的自定义字符串文字语法,它是执行
eval(符号(“##f#f#u memorized_cache”))的缩写。


当然,因为这不是
Memoize
API的官方文档部分,所以不能指望它不会改变,但它目前可以工作。我不确定您是否想要一个更正式的API,但如果您想要,您可以打开一个问题,要求将其作为一个新功能。

啊,太棒了,这太棒了!顺便说一句,你创造了我最喜欢的语言,非常感谢你!我在Project Euler中使用它
julia> var"##f_memoized_cache"
IdDict{Any,Any} with 10 entries:
  (7,)  => 64
  (6,)  => 32
  (4,)  => 8
  (5,)  => 16
  (9,)  => 256
  (10,) => 512
  (2,)  => 2
  (8,)  => 128
  (1,)  => 1
  (3,)  => 4