2 个版本
0.2.1 | 2023年11月13日 |
---|---|
0.2.0 | 2023年11月5日 |
#1153 in 过程宏
13KB
211 代码行
MemoEYES 👁️
两个过程宏,用于自动实现函数的记忆化,使递归函数调用 更快
可能会在将来更新,将两个宏合并为一个具有不同参数的单个宏
#[lru_cache]
此宏创建一个全局静态变量,并使用它进行记忆化。它也是一个LRU缓存,这使得它更加方便
#[lru_cache(max = 10)]
fn fib(n: u128) -> u128 {
if n < 2 {
return n;
}
fib(n - 1) + fib(n - 2)
}
let result = fib(186);
// result: 332825110087067562321196029789634457848
#[memo]
此宏更加明确(更符合Rust的哲学),并且不使用unsafe代码。它修改函数,使其具有一个额外的参数,该参数是一个 HashMap<TUPLE_OF_INPUT_TYPES, OUTPUT_TYPE>
使用它可以直接访问查找表,而无需通过unsafe块和隐式代码
#[memo]
fn fib(n: u128) -> u128 {
if n < 2 {
return n;
}
fib(n - 1) + fib(n - 2)
}
let mut memo = HashMap::new();
let result = fib(186, &mut memo);
// result: 332825110087067562321196029789634457848
贡献
请
这是什么?
想更多地了解函数记忆化,并想学习类似属性的宏。自己解决了。不重要但 命名灵感
依赖项
~1.7–2.5MB
~40K SLoC