Size: a a a

Rust — русскоговорящее сообществo

2020 October 10

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
ЧЗХ
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Зачем эта конструкция с loop/match?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
А, всё, понял
источник

KA

Korolll And in Rust — русскоговорящее сообществo
а в слайсе же вся память должна рядом лежать, если так то понятно почему слайсы не подойдут для этой задачи
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Менее эффективная имплементация, если сравнивать с partition_in_place.
ага
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
У меня не первый раз возникает ощущение, что стдлибе rustfmt не писан
источник

Э

Эрик in Rust — русскоговорящее сообществo
Korolll And
а partition что-то перекладывает судя по vec.iter_mut()
Если тебе эти слайсы нужны чтобы много раз использовать, то один раз переложил, а потом никакой лишней работы.
А если тебе только один раз проитерироваться надо, то делаешь просто
v.iter().for_each(|x| if pred(x) { … } else { … });
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Some(back) => if pred(back) офигенно плохо читается
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Korolll And
а в слайсе же вся память должна рядом лежать, если так то понятно почему слайсы не подойдут для этой задачи
Чел, что у тебя за задача?

Такое ощущение что ты занимаешься преждевременной оптимизацией и xy problem одновременно
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
Чел, что у тебя за задача?

Такое ощущение что ты занимаешься преждевременной оптимизацией и xy problem одновременно
Пацан думает, что N свапов дороже N * M if-else бранчей.
источник

KA

Korolll And in Rust — русскоговорящее сообществo
вафель 🧇
Чел, что у тебя за задача?

Такое ощущение что ты занимаешься преждевременной оптимизацией и xy problem одновременно
вот задача

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

Korolll And in Rust — русскоговорящее сообществo
код что я не дописал описан
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Korolll And
код что я не дописал описан
это не задача...
источник

Э

Эрик in Rust — русскоговорящее сообществo
Почему Fn(T), а не Fn(&T).
источник

Э

Эрик in Rust — русскоговорящее сообществo
У тебя предикат съедает элементы, если что.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Весело с деревьями будет
источник

KA

Korolll And in Rust — русскоговорящее сообществo
Эрик
Почему Fn(T), а не Fn(&T).
да разумно, не подумал
источник

Э

Эрик in Rust — русскоговорящее сообществo
И у F1 надо слайсу, а не вектор в аргументы.
источник

KA

Korolll And in Rust — русскоговорящее сообществo
вафель 🧇
это не задача...
ну я максимум информации дал, что у меня есть, чтобы не секретничать
источник

Э

Эрик in Rust — русскоговорящее сообществo
Деревья боль. И не нужны.
источник