Size: a a a

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

2020 October 14

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
есть какая-то функция из itertools, которая строит из вектора список всех возможных в нем соединений? то есть
make(vec![1,2,3]) == vec![[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
мог бы и сам загуглить, она одинаково называется во всех япах и гуглтранслейтится на раздва
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
оно выдает пермутации размера k, но я думаю ты догадаешься как из неё получить все в одну строку
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
polunin.ai
нет, оно строит N! перестановок всех элементов, а мне нужно множество пар.
Нет, это почти то что надо.
iter.map(|x| [None, Some(x)].iter().cloned()).multi_cartesian_product().map(|it| it.flatten()) это то что надо вроде: итератор по всем возможным подпоследовательностям
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
И то, что ты скинул изначально, на множество пар не похоже
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
flat_map(identity) это flatten()
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ок, поправил
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Mikail Bagishov
Нет, это почти то что надо.
iter.map(|x| [None, Some(x)].iter().cloned()).multi_cartesian_product().map(|it| it.flatten()) это то что надо вроде: итератор по всем возможным подпоследовательностям
или просто
(0..set.len()).flat_map(|i| set.iter().permutatuions(i))
источник

p

polunin.ai in Rust — русскоговорящее сообществo
А есть какой-то #[cfg_if(compile)]? Типо если код под атрибутом не комплируется, то выкинуть его и попробовать снова.
источник

АГ

Алексей Герасимов... in Rust — русскоговорящее сообществo
polunin.ai
А есть какой-то #[cfg_if(compile)]? Типо если код под атрибутом не комплируется, то выкинуть его и попробовать снова.
sfinae?
источник

Э

Эрик in Rust — русскоговорящее сообществo
polunin.ai
А есть какой-то #[cfg_if(compile)]? Типо если код под атрибутом не комплируется, то выкинуть его и попробовать снова.
Это надо самому компилировать до компилятора. В расте такого нет.
источник

H

Hirrolot in Rust — русскоговорящее сообществo
в common lisp есть
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Hirrolot
в common lisp есть
Да ясно что метапрограммирование сильнее везде за пределами раста. Но я пишу на расте🤷‍♀
источник

Э

Эрик in Rust — русскоговорящее сообществo
Hirrolot
в common lisp есть
Ну, так-то можно что-то придумать, взять куски из RA и компилятора, и до компилятора обрабатывать файлы по sfinae, чтобы в компилятор только компилирующиеся куски шли.
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
polunin.ai
Да ясно что метапрограммирование сильнее везде за пределами раста. Но я пишу на расте🤷‍♀
Ну так не пиши?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Эрик
Ну, так-то можно что-то придумать, взять куски из RA и компилятора, и до компилятора обрабатывать файлы по sfinae, чтобы в компилятор только компилирующиеся куски шли.
Можно но я не буду этого делать 🙃
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Andrey Vlasov
Ну так не пиши?
teloxide уже на расте написан, ничего тут не поделаешь🤷‍♀
источник

Э

Эрик in Rust — русскоговорящее сообществo
Но тут встаёт проблема, что

struct X;

#[sfinae]
{
impl Default for X { … }
compile_error!();
}

#[sfinae]
fn foo() -> X { X::default() }
источник

Э

Эрик in Rust — русскоговорящее сообществo
Если мы сперва проверяем нижний sfinae, то он компилируется.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А если сперва верхний, то нижний не компилируется.
источник