- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
pub fn take(end: u32) -> u32
{
(0..).step_by(1000000000)
.map(|i| i * i)
.take_while(|&i| i < end)
.sum()
}
pub fn filter(end: u32) -> u32
{
(0..).step_by(1000000000)
.map(|i| i * i)
.filter(|&i| i < end)
.sum()
}
Решил вернуться к изучению багра rust.
Суть такова: код с take_while выводит 0, код с filter падает с runtime error или выбрасывается rustClang как бесконечный цикл (зависит от версии).
https://ideone.com/IS05Q0
То есть код filter ма-те-ма-ти-че-ски эквивалентен take_while. Поскольку i² монотонно возрастающая функция.
Из примера ниже можно убедиться что цикл на самом деле конечен.
https://ideone.com/xC2r35
Счётчик кидает ошибку при переполнении и range не зацикливается.
for x in (1..).step_by(1000000000) {
println!("{}", x);
}
1
1000000001
2000000001
Runtime error #stdin #stdout #stderr 0.01s 5552KB
3.14159265 05.09.2021 03:43 # +1
https://govnokod.ru/27581#comment658921
3.14159265
Но ведь этот код не похож на цикл без сайд-эффектов.
Почему шланг его зацикливал?
bormand
> Но ведь этот код не похож на цикл без сайд-эффектов.
Значит в него всего-навсего прокрался UB ;)
Хотя я не вижу тут никаких проблем на глаз, даже в крестах u32 без UB'ов.
> сайд-эффектов
А где они, кстати?
3.14159265
Я тоже долго думал и не мог понять.
while (true) есть, внешних сайд-эффектов тоже нет. Но это же полезный расчёт.
Автор говорит что нужно вместо .filter(|&i| i < end) писать .take_while(|&i| i < end). Тогда всё хорошо.
Но если компилятор/язык действительно ма-тем-ати-чны, то он должен понять что i, а вслед за ним i² монотонно возрастающая функция.
И как только найдётся i, который превысит end, то последующие i<end никогда не будет истинным. Это следует из принципа математической индукции.
Соответственно filter в данном случае эквивалентен take_while.
bormand
> Соответственно filter в данном случае эквивалентен take_while.
Нет! У нас же тут не натуральные числа, а кольцо (или как там его в математике) u32.
i бегает по кругу, а filter в отличие от take_while не является условием остановки.
3.14159265 05.09.2021 03:56 # 0
3.14159265 05.09.2021 04:15 # +1
Kozel 05.09.2021 18:13 # +3
en.wikipedia.org/wiki/Empty_sum
Вот отучился я 11 лет в школе и 6 лет на физическом факультете, а о таких простых вещах не задумывался.
Можно ли считать говнокод, который наводит на мысли, хорошим?
bormand 05.09.2021 18:16 # 0
А на ГК это вроде обсуждалось. Именно поэтому я за ГК.
bormand 05.09.2021 18:19 # +1
CEHT9I6PbCKuu_nemyx 05.09.2021 18:20 # 0
guest6 05.09.2021 18:50 # +3
Тем более - на физфаке, где разных пар по математики даже больше (кроме пар по дискретной математике, которых больше у программистов). Kozel, видимо, эту лекцию прогулял.
guest6 05.09.2021 18:55 # 0
кроме безвузных
CHayT 05.09.2021 19:07 # +1
Это не матан, а абстрактная алгебра. Её физикам из рашки дают максимально херово. По сути, вместо неё есть курсы по теории групп и представлений групп, а остальное фи-зи-кам знать якобы нецелесообразно. Идиотская практика, это как строить крышу без фундамента.
CEHT9I6PbCKuu_nemyx 05.09.2021 19:17 # +1
«Сложи n чисел и подели на их количество» гораздо понятнее, чем заумь про интегралы Лебега на хитрожопых множествах.
CEHT9I6PbCKuu_nemyx 05.09.2021 19:28 # +1
А если где-то будет неидиотская практика, то набегут сёмы и скажут, что вуз не учит работать, а готовит ма-те-ма-ти-ков.
guest6 05.09.2021 19:32 # +2
guest6 05.09.2021 19:32 # +2
Экспертам кажется, что его области почти не учат, и наступило бы всеобщее благо, если бы эту область рассказывали от самого начала включая муки её основателя и историю его семьи, иначе к преподаванию области даже не надо приступать.
новости по теме: ШОК! программисты хотят, чтобы обучение начинали с сишки, ассемблера или вовсе абака.
CHayT 05.09.2021 19:35 # +3
guest6 05.09.2021 19:41 # +1
Оставить их только математикам и физикам с теоретической кафедры.
CHayT 05.09.2021 19:45 # 0
guest6 05.09.2021 19:28 # +1
> дают максимально херово.
> а остальное фи-зи-кам знать якобы нецелесообразно
Проблема в том, что математику дают как закон божий. Вот сказал некий бог математики, что это так, а то - эдак, а студент должен выучить.
Но так можно рассказывать математику только математикам, которым она интересна сама по себе. Для всех остальных это всего лишь полезный инструмент, полезность которого во время изучения человек даже не осознаёт.
Почти не рассказывают о реальном применении это питушни, поэтому для студента даже та часть математики - слишком много бессвязных вореций.
Конечно, потом пройденная математика начинает использоваться на предметах, идущих в следующих семестрах. Но её к тому времени все уже забыли как бесполезное говно.
И так со множеством других предметов. Когда начинается реальное применение, все уже забыли изученное. Какой багор )))
guest6 05.09.2021 19:32 # +3
Kozel 05.09.2021 19:58 # 0
CHayT 06.09.2021 00:19 # +1
Soul_re@ver 06.09.2021 00:53 # 0
Motorola 06.09.2021 01:07 # +2
Hacpy 06.09.2021 02:22 # 0
Какой-то дохлый белёсый расист.
Именно поэтому надо учить эбонику.
CHayT 23.12.2021 22:27 # +3
Отклонено. Если прогнать ссаными тряпками философов, озабоченных поиском Истины, и принять, что предельная задача науки — это поиск моделей, обладающих предсказательной силой, то классическая механика — не хуйня. Она обладает очень и очень хорошей предсказательной силой в широком диапазоне систем. Поэтому всякие сложные кейзы в ней до сих пор изучают, и это хорошо.
Физика — самая точная из естественных наук, но в ней полно моментов в духе "хуй знает как оно там работает, но работает. Так что заткнись и вычисляй".
JloJle4Ka 24.12.2021 00:55 # 0
Очень похоже на Си++... Ну, или математику :-)
OMuKPOH 26.12.2021 00:08 # 0
CEHT9I6PbCKuu_nemyx 05.09.2021 19:41 # +1
Нам всё давали с выводом, откуда это берётся. Но мы для остальных потоков были белыми воронами, потому что всяким технологам и экономистам просто кидали готовые формулы за щеку. Экономисты даже решение уравнения dy/dx = ky вызубривали, для них разделение переменных и интегрирование было «лишней подробностью».
С другой стороны, нам не давали ТММ, например, и другие практические дисциплины.
Итого получается, что вузы даже не пытаются сократить разрыв между «теоретиками» и «практиками»: выпускают «практиков», выучивших математические формулы как закон божий, и «теоретиков», которые думают, что булки на дереве растут.
guest6 05.09.2021 20:02 # +1
И сказал бог математики: пользуясь формулой (111) и теоремой 4.2 я вывел такой икс, который вознёсся до небес и накрыл собою всю область определения. Домножив уравнение (15) на бесконечность (семёрку), я получил эту новую формулу!
Мне в школе, где начались доказательства в геометрии, а затем в вузе, где начались доказательства любой питушни, от этого не стало легче.
> с выводом, откуда это берётся.
А надо рассказывать с выводом, зачем это берётся.
j123123 23.12.2021 06:58 # 0
Вам аксиоматику матанализа давали? Ну например, на какие аксиомы надо опираться, чтобы доказать правило Лопиталя?
Аксиомы Пеано вам рассказывали? А какие аксиомы должны быть для описания вещественных чисел? А для комплексных?
CHayT 23.12.2021 22:16 # 0
Kozel 05.09.2021 19:35 # 0
Например, если говорить о фундаменте, у нас было определение вещественного числа как класса эквивалентности сходящихся последовательностей рациональных чисел по отношению сходимости поэлементной разности последовательностей к 0. Ну или мне это приснилось :D
До вышеупомянутого интеграла Лебега тоже доходили (зачем?)
Kozel 05.09.2021 19:12 # 0
3.14159265 05.09.2021 18:22 # +3
-∞
Edit: на помощь спешит божественный JavaScript:
bormand 05.09.2021 18:24 # 0
3.14159265 05.09.2021 18:49 # +2
Но Haskell (названный в честь ма-те-ма-ти-ка и логика). На этот раз взят конечный список. Сразу видно, какой язык сделали пирдолики-теоретики, а какой — практики-профессионалы.
guest6 05.09.2021 18:54 # +1
Зачем этот фильтр тут?
Так смешиваются джве проблемы
1. Анскильность компилятора, который не смог доказать filter (const False) === []
2. Анскильность некоторых функций, которые не терпят пустого списка
В примере про sum сработало (1), в примере про maximum - (2).
guest6 05.09.2021 19:02 # +3
Поясню. Без указания типа будет абстрактное число.
И в этом проблема: абстрактным числом может оказаться, скажем, Integer, у которого нет бесконечности, а значит Num a должно багровать на maximum [].
А вот если подставить список Double, то уже будет Double, где есть бесконечность
Кто такой этот максимум? Кусок реализации Foldable
Какой багор, Foldable берёт только однопараметрический тип, т.к. [] подойдёт, а [Double] - уже нет. Возможность реализовать нормальный максимум сломали, когда сделали Foldable.
3.14159265 05.09.2021 19:08 # +2
> И в этом проблема: абстрактным числом может оказаться, скажем, Integer, у которого нет бесконечности, а значит Num a должно багровать на maximum [].
Потом льётся ушат пропаганды про ма-те-ма-тич-но-сть, что все проблемы решает строгая путизация, что компилятор отлавливает все ошибки.
Итог печальный: в «JS» реально используемом функциональном языке для практиков выдаётся верный результат.
А в теоретической заедушне: Runtime Error и Foldable bagor.
CEHT9I6PbCKuu_nemyx 05.09.2021 18:55 # 0
Есть array_reduce, которой можно скормить пустой массив, но ей нужно подсовывать свой коллбек для вычисления наибольшего значения.
Хотя погодите, есть же max от массива. Скармливаем пустой:
https://ideone.com/x2lPty
Возвращает false. Именно поэтому я за «PHP».
guest6 05.09.2021 18:45 # +2
bormand 05.09.2021 18:48 # 0
guest6 05.09.2021 19:07 # +1
3.14159265 05.09.2021 19:13 # 0
> Там явно бы проходили массивы и рано или поздно встретилась бы задача про сумму элементов.
Да. Пришёл бы какой-то «кегдан» «троллить препода» хацкилом.
А ему преподаватель и отвечает по-отечески: «Иди подучи матчасть, питух. Ты животное перед тем как кукарекать, почитай про еmpty sum. Чему тебя учить, питушок? Кукарекать начал ты, причем зафейлился в очередной раз.»
И привычно сольёт хаскель-отребье Сишным for (int i=0; i<len; i++)
CHayT 05.09.2021 19:29 # 0
3.14159265 05.09.2021 19:32 # +1
CHayT 05.09.2021 19:40 # +1
Запили maximumFloat, который будет работать так же как JS и радуйся.
Либо отнаследуйся от Ord, и сделай тайпкласс ``Ord c минимальным и максимальным элементом'', для него можно будет запилить подобную питушню обобщённо. Просто никому нахер это не надо.
P.S. мартышка и очки Пи и Haskell.
CHayT 05.09.2021 19:51 # +1
bormand 05.09.2021 19:51 # 0
Kozel 05.09.2021 20:11 # 0
guest6 05.09.2021 19:53 # 0
CHayT 05.09.2021 19:54 # 0
bormand 05.09.2021 19:56 # +2
3.14159265 05.09.2021 19:58 # 0
Только что хотел написать тоже самое: ленивую функцию, которая вернёт бесконечную строку максимальных чаров (аналог числа -1).
bormand 05.09.2021 20:01 # +1
min_str = [] :: String
guest6 05.09.2021 20:05 # +2
bormand 05.09.2021 20:07 # 0
CHayT 05.09.2021 20:04 # +1
guest6 05.09.2021 20:08 # 0
а как же елда с генератором?
CHayT 05.09.2021 20:10 # 0
bormand 05.09.2021 20:13 # +1
А она пролезет в функцию, которая ожидает строку? Или плучится [Object object]?
3.14159265 05.09.2021 20:14 # 0
Это просто лживая, анскильная пропаганда чтобы очернить «JS» и компенсировать слив.
Переопределил toString на объекте и готово.
https://govnokod.ru/26408#comment524399
bormand 05.09.2021 20:16 # 0
И чему равен toString бесконечной строки (нам ведь её с обычными строками ещё сравнивать)?
3.14159265 05.09.2021 20:19 # 0
bormand 05.09.2021 20:22 # +1
Какая протечка абстракций )))
Открыл окно, достал бесконечность.
guest6 05.09.2021 20:16 # 0
Если проверяет typeof, то не пролезет конечно
3.14159265 05.09.2021 20:11 # 0
Можно. В абстрактной теории запарты. А в реальности: гиптiме еггог.
На практике сначала это был аргумент для оправдания говнореализации maximum.
Но потом ошибка хачкеля незаметно стала его преимуществом.
guest6 05.09.2021 20:13 # 0
Крымскотатарский-русский словарь
запарта: строгий выговор, строгач
запарта чекмек — дать строгий выговор
запарта емек — получить строгий выговор, схлопотать строгача
bormand 05.09.2021 19:54 # 0
3.14159265 05.09.2021 19:51 # 0
Но почему тогда это говно, имея сверхстрогую путизацию от хеппи-миллера, компилируется и падает в рантайме?
Даже говняный rust не может собрать похожее (не знаю хорошо это или плохо)
P.S: я вашу прелесть трогать не собирался. Начал смотреть UB дrustни.
Просто в процессе заметил что дrustуха всё украла из Хацкеля, и решил посмотреть как было в оригинале.
CHayT 05.09.2021 19:57 # 0
3.14159265 05.09.2021 20:07 # 0
Хаскелисту говоришь: у вас тут maximum функция неправильно работает. Компилируется и падает в рантайме.
В ответ получаешь заговаривание зубов: «разность градиента пандорической диворекци и кативной функции интерминальной суммы, полне стрелки ко-монады с категорического трансформера эндофункторого чистомата».
Спор двух культур.
CHayT 05.09.2021 20:20 # +1
Скриптушки начали вещать про математику, и они её получили.
3.14159265 05.09.2021 20:22 # +1
> начали вещать про математику, и они её получили
Как там квантор всеобщности и предикаты?
https://govnokod.ru/27646#comment668795
CHayT 05.09.2021 20:26 # +3
3.14159265 05.09.2021 20:52 # +1
Именно поэтому я за «Coq» и против «Haskell».
bormand 05.09.2021 20:55 # +1
Там эту проблему вообще просто решили: есть максимум из списка натуралов (для пустого ноль), а минимум только из пары.
3.14159265 05.09.2021 22:59 # 0
На самом деле это слабый, чисто теоретический аргумент, применимо к оптимизации filter ( \n -> False ).
Напоминает спор j123123 и ISO про то что constexpr-переменные тоже Тьюринг-полная питушня и в теории посчитать их невозможно. Однако на практике нормальная IDE вполне успешно выводит 99% случаев.
C++ тоже Тьюринг полный язык, но тем не менее оптимизирует нафиг такие предикаты.
А не обосирается и прячет свою анскильность за теоретушнёй и кучей зауми.
guest6 05.09.2021 20:27 # +1
Скриптушки бы просто выбрали язык, где математики не кукарекают, а числа складываются. Впрочем, в реальности так и случилось.
В Haskell за последние годы изменилось много чего, но никто даже не заметил, даже реальный код не сломался. В крестах бы давно все на говно извелись. А на хаскеле пара докторов переписали свои программы - и вся кодовая база перешла на новую версию.
guest6 05.09.2021 20:28 # +1
3.14159265 05.09.2021 20:31 # 0
> даже реальный код не сломался.
>>реальный код
>>В Haskell
Оксюморон.
То чего нет — не ломается.
Кстати именно из-за реального практического использования, в промышленных языках подобные corner case отлажены и нормально работают.
CEHT9I6PbCKuu_nemyx 05.09.2021 20:47 # 0
bormand 05.09.2021 20:09 # 0
Из-за NaN'а поди?
3.14159265 05.09.2021 20:12 # +2
Похоже да. Глубоко копаться в этом говне нет желания.
Там советы примерно как CHayTа: чтобы нормально сортировать массив флоатов, сделайте трейты, напишите ещё 200 строк кода.
CEHT9I6PbCKuu_nemyx 05.09.2021 20:13 # 0
guest6 05.09.2021 20:14 # +2
3.14159265 05.09.2021 19:57 # 0
Предлагается какая-то пирдоль вместо простого математически скилльного решения из коробки.
> Просто никому нахер это не надо.
Понятненько. Так обычно оправдываются всякие анскильные недоязычки: «просто это никому не нужно», «можно и без этого обойтись».
CHayT 05.09.2021 20:00 # 0
Просто хаскеллисты знают про разницу между порядком и решёткой.
guest6 05.09.2021 20:08 # 0
CHayT 05.09.2021 20:09 # +1
Эта пирдоль называется lattice в ма-те-матике*.
* Могу ошибаться в определениях по памяти
JloJle4Ka 05.09.2021 05:44 # 0
3.14159265 05.09.2021 15:17 # +1
Нам рекламируют это дерьмо как математические языки.
А в итоге я должен думать про какую-то императивную питушню под капотом. Что это превратится в какой-то цикл, который будет бесконечно молотить.
Я хочу написать например ∀x ¬P(x)
Но не могу этого сделать, т.к. математические языки не в курсе про квантор всеобщности и ложный предикат.
И что в итоге вышло? Всё что было заявлено — со всем обосрались.
Desktop 05.09.2021 15:19 # +1
guest 17.03.2016 17:02 # +6
хороший язык
люблю CLR и люблю функциональщину
но у меня на клавиатуре нету ψ, и потому мне он не подойдет
придется делать стартап на пхп
3.14159265 05.09.2021 15:21 # +1
> .filter(|&i| false)
> filter ( \n -> False )
По сути означают то же.
Если это говно не понимает элементарного, что после filter ( \n -> False ) у нас должно оставаться пустое множество. То какой от него толк?
Это же не божественный gcc, который ASD_77 бодает в соседнем треде, а gcc ухмыляется и всё сводит к ret.
Тут дали простейший пример на логику и говно опять обосралось.
ObeseYoung 05.09.2021 21:36 # 0
Ideone айсоско метит
3.14159265 05.09.2021 23:05 # +1
https://godbolt.org/z/bs7nbx1hP
А возьмём пару чётных:
ISO 05.09.2021 23:06 # 0
> iota
3.14159265 05.09.2021 23:10 # 0
Всё же отлично инлайнится и оптимизируется.
std::views::filter(False) превращает цепочку в noop в отличие от Haskell и Rust.
j123123 06.09.2021 06:26 # 0
асм:
И нахуя этот "std::views" ? Опять говностандартизаторы хуйни понадобавляли
CEHT9I6PbCKuu_nemyx 06.09.2021 08:53 # 0
j123123 10.09.2021 01:49 # +1
3.14159265 06.09.2021 15:55 # +1
а) Показать псевдофункциональным дешёвкам как должны выглядеть zero-coast абстракции.
б) Оно ленивое и функциональное.