2 个版本

0.1.1 2020 年 8 月 6 日
0.1.0 2020 年 8 月 6 日

#2701Rust 模式

MIT/Apache

4KB
53

可变数元群

这个小的软件包提供了从元群创建可变数函数的(实验性)支持。

更简单地说,给定一个 fn f(T,T) -> T,这个软件包允许你生成一个可变数函数 f',使得

f'(a: T,b: T, c: T,....) == f(a,f(b,f(c,...f(z,identity)..)))

其中恒等性是 f 上的恒等操作。具体来说,只有 f(a, identity) == a 必须实际上成立。

如何使用

use variadic_monoids::*;

// You must create a name for your monoid with a struct. This allows you to
// create multiple monoids per type (and they can be for external too)
struct AddMonoid;

impl  Monoid<AddMonoid> for  i32 {
   fn  identity() -> Self { 0 }
   fn  operator(a: Self, b: Self) -> Self { a + b }
}

// Call the (constant function) gen_function to retrieve your function
// With type parameters as the implemented Type, and Name of your monoid.
const sum: VariFunc<i32, AddMonoid>  =  gen_function::<i32, AddMonoid>();

fn main() {
   println!("{}", sum(1,2,3,4));
}

在你的 Cargo.toml

[dependencies]
...
variadic_monoids="0.1.1"

依赖关系

~52KB