Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.234.141] |
|
Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
D не знаю, так что интересно - take возвращает список или новый рейндж? Цитата korvin @ 1) Есть такое выражение: «если вы используете UnsafePreformIO, то вам не нужен Haskell» или как-то так. Какая-то странная категоричность. Напрямую UnsafePreformIO использовать не надо, надо использовать Debug.Trace, который, вроде, из коробки есть. Ну и хочешь сказать это решение хуже, чем уродовать функции ради отладки? Ну код уже есть и похоже D работает не так как я предположил. Мой вариант просто и хоть на плюсах изобразить можно. Хотя, конечно, это будет не прямой аналог. Смысл в следующем: fibs в расте вернёт итератор, который хранит в себе состояние и на котором можно бесконечно звать next, ну а take ограничит этот итератор. Не думаю, что код что-то изменит. |
Сообщ.
#32
,
|
|
|
Цитата DarkEld3r @ Список? Ты наверное имел в виду массив. Нет не список/масив, а новый рейндж. Тоже ленивый. Функции обработки рейнджей в D сделаны лениво везде, где можно сделать их лениво. В частности map и filter тоже возвращают ленивые рейнджи.D не знаю, так что интересно - take возвращает список или новый рейндж? Цитата DarkEld3r @ На самом деле в D все точно так же. recurrence вовзращает рейндж хранящий внутри состояние. Рейнджи в D не являются встроенными в язык - это библиотечные сущности. Это, конечно, работает не так как корвиновский список складывающийся с самим собой со смещением, но результат аналогичен. Ну код уже есть и похоже D работает не так как я предположил. Мой вариант просто и хоть на плюсах изобразить можно. Хотя, конечно, это будет не прямой аналог. Смысл в следующем: fibs в расте вернёт итератор, который хранит в себе состояние и на котором можно бесконечно звать next, ну а take ограничит этот итератор. |
Сообщ.
#33
,
|
|
|
Цитата applegame @ Это не принципиально. Список? Ты наверное имел в виду массив. Меня как раз интересовало как раз "контейнер" там или "честный рейндж". Цитата applegame @ Понятно. Ну в расте, это всё-таки больше "итераторы". В смысле, вывести на печать (стандартными средствами) итератор нельзя. То есть между print и take надо или собирать значения в контейнер или организовывать цикл для прохода. На самом деле в D все точно так же. recurrence вовзращает рейндж хранящий внутри состояние. |
Сообщ.
#34
,
|
|
|
Цитата DarkEld3r @ В смысле, вывести на печать (стандартными средствами) итератор нельзя. То есть между print и take надо или собирать значения в контейнер или организовывать цикл для прохода. Странный он, этот ваш rust |
Сообщ.
#35
,
|
|
|
Цитата DarkEld3r @ Дешный writeln/writefln почти всеяден. Фактически типобезопасный printf.Понятно. Ну в расте, это всё-таки больше "итераторы". В смысле, вывести на печать (стандартными средствами) итератор нельзя. То есть между print и take надо или собирать значения в контейнер или организовывать цикл для прохода. Ну вот, шёл, понимаешь, кругом красивая природа, солнышко и тут бац - вступил в говно foldl vs foldl' Если вдруг у вас переполнение стека, то вместо ленивого foldl воспользуйтесь более strict(строгим?) foldl'. WTF? На самом деле я, конечно, все понимаю: рекурсия, ленивость и все такое, но математическую красоту слегка опоносили. Это наверное как раз об этом: Цитата korvin @ Да, но мне интересно, что ты скажешь, когда познакомишься с ним получше и узнаешь, что, например, написав хвостово-рекурсивную функцию внезапно обнаружишь переполнение стека, из-за ленивости, и окажется, что нужно форсировать вычисления специальным образом. |
Сообщ.
#36
,
|
|
|
Цитата D_KEY @ Странный он, этот ваш rust Почему странный? В С++ ведь тоже нельзя просто так в printf/cout пару итераторов передать. Написать функцию которая "проходится по итератору" в расте тоже проблем никаких нет. Аналога ostream_iterator из коробки и правда нет. Но тут как раз всё дело в том, что применение map, filter и других подобных функций возвращает новый ленивый итератор. Для того чтобы получить значения надо итерироваться, ну или собрать значения куда-то. Добавлено Цитата applegame @ Дешный writeln/writefln почти всеяден. Фактически типобезопасный printf. В расте print! - макрос, так что тоже может много всего, но не работать с итераторами. Подозреваю, что это сознательное решение - мол мало ли что может скрываться за итератором и т.д. К тому же, рейнжи в расте не копируемые. |
Сообщ.
#37
,
|
|
|
Цитата applegame @ Ну вот, шёл, понимаешь, кругом красивая природа, солнышко и тут бац - вступил в говно foldl vs foldl' Если вдруг у вас переполнение стека, то вместо ленивого foldl воспользуйтесь более strict(строгим?) foldl'. WTF? На самом деле я, конечно, все понимаю: рекурсия, ленивость и все такое, но математическую красоту слегка опоносили. Это наверное как раз об этом: Цитата korvin @ Да, но мне интересно, что ты скажешь, когда познакомишься с ним получше и узнаешь, что, например, написав хвостово-рекурсивную функцию внезапно обнаружишь переполнение стека, из-за ленивости, и окажется, что нужно форсировать вычисления специальным образом. Нет, не об этом. Как раз наоборот, ленивые языки более «математически красивы» (что бы ты под этим не подразумевал), «уродствами» они становятся с другой, технической точки зрения. Добавлено Не, просто поспешил. Добавлено Цитата DarkEld3r @ Какая-то странная категоричность. Напрямую UnsafePreformIO использовать не надо, надо использовать Debug.Trace, который, вроде, из коробки есть. Ну и хочешь сказать это решение хуже, чем уродовать функции ради отладки? Трассировка не всегда именно то, что нужно. А сказать я хочу, что ленивость-по-умолчанию не всегда удобна. |
Сообщ.
#38
,
|
|
|
Цитата korvin @ Какое-то непонимание. Полагаю, что мы говорили об одном и том же. Под "опоносили" я подразумевал не ленивость, а как раз необходимость всяких обходных маневров вроде специальных версий тех же самых функций. Я понимаю, что это вынужденная мера, но осадочек-то остается. Нет, не об этом. Как раз наоборот, ленивые языки более «математически красивы» (что бы ты под этим не подразумевал), «уродствами» они становятся с другой, технической точки зрения. |
Сообщ.
#39
,
|
|
|
Цитата applegame @ Какое-то непонимание. Полагаю, что мы говорили об одном и том же. Под "опоносили" я подразумевал не ленивость, а как раз необходимость всяких обходных маневров вроде специальных версий тех же самых функций. Я понимаю, что это вынужденная мера, но осадочек-то остается. А, ну да, я это имел в виду. =) |