| Crates.io | iter-comprehensions |
| lib.rs | iter-comprehensions |
| version | 1.0.0 |
| created_at | 2019-03-30 17:42:38.138555+00 |
| updated_at | 2024-01-17 09:31:45.551603+00 |
| description | A library for iterator comprehensions |
| homepage | https://chiselapp.com/user/fifr/repository/iter-comprehensions |
| repository | https://chiselapp.com/user/fifr/repository/iter-comprehensions |
| max_upload_size | |
| id | 124816 |
| size | 20,431 |
iter-comprehensions provides a few macros implementing iterator and vector
comprehensions for Rust.
comprehension! for generating a sequence of index tuplesmap! for generating a sequence of expressionsvec! for constructing vectorssum! for computing the sum of some valuesproduct! for computing the product of some valuesThe macro comprehension! can be used to generate a sequence of elements using
generating sequences and conditional filters.
comprehension!(i1 in RANGE1, COND1, ..., ik in RANGEk)
where RANGE* are iterators (in fact, everything implementing IntoIterator)
and each COND* is a boolean condition. Each RANGE and COND term can use
the variables declared in preceeding range expressions.
The macro map! adds an additional expression that computes a value
depending on the indices:
map!(i1 in RANGE1, COND1, ..., ik in RANGEk, EXPR)
map!(EXPR; i1 in RANGE1, COND1, ..., ik in RANGEk)
The expression {5i + j: i ∈ {0,…,4}, j ∈ {0,…,4}, i < j } is
equivalent to the following form
use iter_comprehensions::map;
assert_eq!(map!(5*i + j; i in 0..5, j in 0..5, i < j).collect::<Vec<_>>(),
vec![1, 2, 3, 4, 7, 8, 9, 13, 14, 19]);
The analogous syntax can be used to create vectors:
use iter_comprehensions::vec;
assert_eq!(vec![i; i in 0..5], vec![0,1,2,3,4]);
assert_eq!(vec![(i,j); i in 0..3, j in 0..3, i < j],
vec![(0,1), (0,2), (1,2)]);
Computing a sum of values:
use iter_comprehensions::{sum, vec};
assert_eq!(sum!(i; i in 1..10, i % 2 == 1), 25);
let S = vec![i; i in 1..10];
assert_eq!(sum!(i in S, i % 2 == 1, i), 25);
Computing a product of values:
use iter_comprehensions::product;
assert_eq!(product!(i; i in 1..=5), 120);
assert_eq!(product!(i in 1..=5, i), 120);
Frank Fischer frank-fischer@shadow-soft.de
Put the requirement iter-comprehensions = "^1.0.0" into the Cargo.toml of
your project.
See docs.rs.
Source code of latest tagged version: iter-comprehensions-v1.0.0.tar.gz
Source code of trunk: iter-comprehensions-trunk.tar.gz