#set #proc-macro #haskell #macro

setbuilder

一个进程宏,用于使用Haskell风格的集合构建器符号定义的集合创建迭代器

3个稳定版本

5.0.1 2023年11月29日
5.0.0 2023年11月27日
4.0.0 2023年10月15日
3.0.1 2023年10月2日
1.0.1 2023年9月4日

304进程宏

Download history 4/week @ 2024-04-02

94 每月下载量

MIT 许可证

12KB
239

set_builder

一个进程宏,用于使用Haskell风格的 集合构建器符号 定义的集合创建迭代器。

需要注意的是,这些“集合”并不是真正的集合,因为不能保证集合的成员(元素)是唯一的。

语法

复杂集合

//   The pattern of the binding(s)
//
//   Mapping     │      ┌── Expression that evaluate into types implementing `IntoIterator`.
//  expression   │      │
//      │        │      │            ┌─ Predicate that evaluates to `bool`
//      ▼        ▼      ▼            ▼
set![ expr : $($(pat <- expr) | $(expr)),* ]

简单枚举集合

这只是为了数学上的对称性,并返回数组而不是迭代器,应始终首选数组语法 [...] 而不是这个。

//        ┌─ Values to put in the set
//
set![ $(expr),* ]

示例

use set_builder::set;

// Single-binding set with a predicate
let set = set![ x * 2 : x <- [1, 2, 3], *x > 1 ];
assert_eq!(set.collect::<Vec<_>>(), [4, 6]);

// Cartesian product without a predicate
let set = set![ (x, y) : x <- [1, 2], y <- [3, 4] ];
assert_eq!(set.collect::<Vec<_>>(), [(1, 3), (1, 4), (2, 3), (2, 4)]);

// Simple enumeration
let set = set![ 1, 2, 3, 4, 5 ];
assert_eq!(set, [1, 2, 3, 4, 5]);

依赖关系

~320–780KB
~18K SLoC