#monoid #semigroup #functional #partial #functional-programming #collection #semigroups

partial-functional

Rust 的一些半群和幺半群的小集合

1 个不稳定版本

0.1.0 2022 年 6 月 26 日

#2311Rust 模式

MIT 许可证

33KB
832

部分功能型

这是一个在 Rust 中实现的一些函数式编程语言的类型集合。我的主要目标是学习更多 Rust,并且这是当我做了 Rust 中的“部分配置”时产生的,我决定将其制作成一个自包含的 crate。

半群

半群是一种可以与其他类型结合以创建相同类型新类型的类型。例如,Rust 的数值原语如 u32 在加法运算符下就是一个例子,例如 5 + 2 将会得到一个新的 u32 类型的 7。一些更有趣的半群包括 Option,如果 T 也是半群,以及 Result,如果 T 和 E 都是半群。

幺半群

幺半群是半群的一个子特例,具有额外的 单位元 属性。空单位元和 Rust 标准库中的 Default 特性可以互换使用。任何实现了 Semigroup 和 Default 的类型都将获得 Monoid 的泛型实现。

示例

以下是一些示例,更多示例可以在源 crate 的 examples 目录下找到。

以下是一个来自 LeetCode 问题的非常简单的示例

use partial_functional::prelude::*;

fn max_profit(prices: Vec<u32>) -> u32 {
    let mut cheapest = Min::empty();
    let mut profit = Max::empty();

    for price in prices {
        cheapest = cheapest.combine(price.into());
        profit = profit.combine(Max(price - cheapest.0));
    }

    profit.0
}

依赖

~1.5MB
~38K SLoC