4 个版本
0.2.2 | 2023年11月23日 |
---|---|
0.2.1 | 2023年7月3日 |
0.2.0 | 2023年7月3日 |
0.1.0 | 2023年3月20日 |
1208 在 数学
27 每月下载次数
在 3 个 crates 中使用(通过 polynomial_ops)
10KB
153 代码行
一个用于对实现 FnOnce 的任何事物进行柯里化的crate。
参数可以逐个传递,生成一个新的实现 FnOnce(可能还有 FnMut 和 Fn)的东西,可以调用一个参数更少的。
lib.rs
:
一个用于 Rust 中函数柯里化的crate
柯里化是一种函数式编程术语,本质上意味着将第一个参数传递给函数,生成一个新的函数,只需要下一个参数。
示例
use currying::*;
let f = |x, y, z| x + y + z;
let (x, y, z) = (1, 2, 3);
let fx = f.curry(x);
assert_eq!(fx(y, z), f(x, y, z));
let fxy = fx.curry(y);
assert_eq!(fxy(z), f(x, y, z));
let fxyz = fxy.curry(z);
assert_eq!(fxyz(), f(x, y, z));
柯里化也可以在编译时进行。
#![feature(const_trait_impl)]
use currying::*;
const fn f(x: u8, y: u8, z: u8) -> u8
{
x + y + z
}
const X: u8 = 1;
const Y: u8 = 2;
const Z: u8 = 3;
const ASSERTIONS: [bool; 3] = {
let fx = f.curry(X);
let fxy = fx.curry(Y);
let fxyz = fxy.curry(Z);
[
fx(Y, Z) == f(X, Y, Z),
fxy(Z) == f(X, Y, Z),
fxyz() == f(X, Y, Z)
]
};
assert_eq!(ASSERTIONS, [true; 3]);
依赖项
~1.5MB
~36K SLoC