Sergey
Sergey
да
Sergey
думал другие
Marat
Ну telegram-bot бросили
Marat
Типы написали, а апи нет
Сережа
Чем математические типы от обычных отличаются?
Sergey
Сережа
Не-а
Sergey
ну вот
Sergey
Option и Result это по спеке
Sergey
монады
Sergey
собственно монады, функторы, аппликативные монады и т.д. должны быть реализованы по спеке
и гарантируют взаимодействие друг с другом
Sergey
много плюшек
Sergey
а вообще это все основы фп
Sergey
протокол у телеги ебуче сложный
Сережа
Они гарантируют тебе максимально высокий уровень абстракции
Сережа
Это не то чего обычно хотят от системного языка
Сережа
Хотя может я просто не осилил
Sergey
ну писать бота на системном языке тоже не алё
Sergey
но раст как бы позволяет поднять абстракции до удобных
Sergey
я правда ещё не дошел до этого
Сережа
Да и фп без монад есть, я хз о чем вы тут сретесь я старый
Сережа
Тут сейчас придут и скажут про нкт которых нет в расте, и без которых монады сложно
Marat
А кстати допустим вот я уверен что у меня никогда не будет бесконечной вложенности, а раст меня заставляет боксить
Marat
Не зерокост язык
Sergey
Anton
Anton
каждайя реализация может иметь свой размер
Ivan
а как тут должен вести себя настоящий зерокост язык? сразу выделять терабайт, шобы точно влезло? =)
Anton
Чет ты как муравей
Anton
Херню какую то несешь
Vladimir
Сережа
Про монады лучше расскажи
Сережа
Какой аналог у монад в крестах?
Сережа
Давайте проголосуем мейби в расте монада или нет
Vladimir
А в расте?
Vladimir
В расте нет монад
Сережа
Вон тебе же сказали мейби
Vladimir
В расте нету мейби
andrei
Option
Сережа
Тайп конструктор
Vladimir
А в чем монадность?
andrei
а че законы не работают?
Сережа
Нормальный человек таким вопросом в канун Нового года не задается
Sergey
кто как паблишит доки по крейтам?
andrei
docs.rs?
Sergey
хм
Sergey
ну да
Anton
Есть, кто не спит? Помогите борроучекер победить
Nikolay
Я спать
Nikolay
Если мне приснится решение — напишу
Anton
Ладно, в общем задача у меня такая: я прохожу по вектору, беру два соседних элемента, выполняю над ними проверку. Если проверка проходит, я мёрджу содержимое второго элемента в первый и удаляю его из вектора
Anton
Естественно он мне не даёт заборроуить одновременно два элемента, чтобы перелить содержимое из одного в другой
Anton
Что тут можно сделать, кроме клонирования элементов?
Маjко
Индекс сохранять
Маjко
for i in 0..vec.len() {
let index = {
if check(vec[i], vec[i+1]) {
Some(i)
} else {
None
}
}
if let Some(i) = index {
merge(&mut vec, i, i+1)
}
}
Маjко
Первое что в голову пришло
Маjко
Скорее всего можно элегантнее
Anton
Хмм
Anton
То есть внутри merge лезть прям во внутренности структуры?
Anton
Ну ок, идею понял, спасибо
Anton
Но это конечно печально, что функция merge будет работать только при наличии вектора
Маjко
Маjко
Маjко
Это так, иллюстрация
Маjко
Суть а том чтобы у тебя не было висячих ссылок в тот момент когда ты мутируешь вектор
Anton
Просто получается, что все функции либо приходится инлайнить, либо наоборот в них вносить лишние зависимости
Маjко
Компилятор не дурак
Anton
А что могло потенциально поломаться, если бы мой код скомпилировался?
Cuno
покажи "свой" код
Anton
https://pastebin.com/SMk0mjyc
Anton
Ну тут current_group можно заменить на индекс, да
Anton
Хотя стоп
Anton
Оно должно скомпилироваться)
Anton
Сейчас проверю
Anton
Да, всё отлично. Оказывается, проблемы и не было, я просто раньше времени запаниковал
Sergey
Привет. Подскажите пожалуйста алгоритм обхода небинарного дерева без использования рекурсии (с использованием стека)?