EG
Size: a a a
EG
EG
KA
в🧇
partition_in_place.EG
Э
v.iter().for_each(|x| if pred(x) { … } else { … });EG
Some(back) => if pred(back) офигенно плохо читаетсяв🧇
Э
KA
use std::marker::PhantomData;
enum IDTree<C, T, Predicate>
where
Predicate: Fn(T) -> bool {
Leaf(C),
Brnch { left: Box<IDTree<C, T, Predicate>>, right: Box<IDTree<C, T, Predicate>>, predicate: Predicate, _phantom: PhantomData<T> }
}
fn learn_id3<T, C, F1, F2>(data: Vec<(C, T)>, f: F1) -> IDTree<C, T, F2>
where
C: Clone + Eq,
T: Clone,
F1: Fn(&Vec<(C, T)>) -> F2,
F2: Fn(T) -> bool {
let (c1, _) = data[0].clone();
if data.iter().all(|(c, _)| &c1 == c) {
IDTree::Leaf(c1)
} else {
let pred = f(&data);
бъём на две части по придикату
проверяем на пустое множество обе части
собираем дерево через рекурсивный вызов для левой и правой ветки
}
}
KA
в🧇
Э
Fn(T), а не Fn(&T).Э
в🧇
KA
Fn(T), а не Fn(&T).Э
F1 надо слайсу, а не вектор в аргументы.KA
Э