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