
qwe
18.12.2016
17:12:09
массив четных чисел

Dmitry
18.12.2016
17:13:45
вот что получается:
return 0; в конце это разве выход из положения?

qwe
18.12.2016
17:17:09
да, проблема не в языке

Google

qwe
18.12.2016
17:18:15
вам надо почитать что-нибудь по алгоритмизации
а я не помню уже, что я читал
давно это было

Dmitry
18.12.2016
17:19:03
все что я находил было дико сложным - деревья, кучи и тд

qwe
18.12.2016
17:19:15
да Вам не это надо)
вам что-нибудь типа сортировки пузырьком...
такое

Dmitry
18.12.2016
17:30:57
А в ди можно сделать чтобы метод работал как генератор?
Чтобы его можно было в цикле обходить. Точнее то что он возвращает

qwe
18.12.2016
17:40:24
можно через while вызывать call
и по-моему в D есть перегрузка какого-то оператора, который позволяет использовать объект класса в foreach
opApply кажется

Dmitry
18.12.2016
18:12:32
да, точно onAppy

Google

Dmitry
18.12.2016
18:20:50
а не глянешь вот тут момент с return http://vpaste.net/uEH5A

qwe
19.12.2016
04:58:45
@DmitryBubnenkov надо вернуть массив, а не число. У Вас первый return с числом и второй тоже

Dmitry
19.12.2016
07:15:44
Короче буду сегодня весь день сидеть с генераторами тогда разбираться, спасибо за то вчера кучу примеров дал. Сейчас еще раз многопоточность в голову уложу и с ними продолжу
qwe

qwe
19.12.2016
07:25:33
не за что, но говорю еще раз, что лучше не за многопоточность хвататься, а за основы

Dmitry
19.12.2016
10:46:07
qwe о кажется начало доходить. ялд получается работает как return только не прерывая цикла т.е. он возвращает данные при каждом шаге

qwe
19.12.2016
10:49:42
@DmitryBubnenkov yield приостанавливает работу fiber'a, и с yield начинается работа его, при следующем вызове

Dmitry
19.12.2016
10:57:02
а генератор это частный случай класса так?
Просто он создается следующим сопособом:
auto r = new Generator!int(
Есть две метода:
https://dlang.org/phobos/std_algorithm_iteration.html#each
и
https://dlang.org/phobos/std_algorithm_iteration.html#map
Я не могу понять, как по их сигнатуре понять, map нельзя записывать как map!(a=>a.writeln)
Просто на что смотреть надо глазами?
вроде бы и то и то возврщает template

Oleg
19.12.2016
13:50:43
map!(a=a.writeln) синтаксически неправильная запись
map!(a=>a.writeln)
можно было бы так, но не так
map по логике производит поэлементную обработку и возвращает новый элемент

Dmitry
19.12.2016
13:51:29
ой, это я опечатался

Oleg
19.12.2016
13:51:49
each производит поэлементную обработку, не возвращает новый элемент
вот и вся разница
по сигнатуре не понять, видимо
это одно из неприятных свойств D, которое, отчасти, связанно с некоторыми преимуществами
например
struct MyMegaSuperLongNameStruct { ...}
auto func()
{
return MyMegaSuperLongNameStruct(...);
}

Google

Oleg
19.12.2016
13:54:18
с одной стороны позволяет не писать несколько раз длинные названия, заменяя их auto, но с другой через документацию не видно что возвращает функция

Dmitry
19.12.2016
13:54:44
А в шарпе как проблема решается?

Oleg
19.12.2016
13:54:57
да хз
может в шарпе нет этой проблемы)
ну, всмысле, нельзя просто взять и написать auto
я не помню
в питоне вообще не считается проблемой это

Dmitry
19.12.2016
13:56:03
`map!(fun)(range)`а тут что? Получается мы передаем в шаблон функцию и диапазон? Судя по описанию

Oleg
19.12.2016
13:56:11
ну да
для каждого элемента range будет вызвана fun
и результатом будет новый range
вернее не так

Oleg
19.12.2016
13:57:16
каждый раз, когда мы захотим получить элемент range, обработанный через fun будет браться этот элемент и обрабатываться
сама по себе запись auto n = range.map!fun; не делает ни одного вызова fun
только когда обращаешься к n происходят эти вызовы

Dmitry
19.12.2016
13:58:21
А что значат разные предикаты:
template each(alias pred = "a")

Oleg
19.12.2016
13:58:55
alias может съесть как функцию, так и строку
но строки специальные должны быть
из строк потом делается функция

Dmitry
19.12.2016
13:59:54
как ты понял что оно функцию может съесть? На какое слово смотреть?

Google

Oleg
19.12.2016
14:00:11
никак
может быть оно ещё и число может принять, я не знаю
но это было бы не логично
в доке должно быть написанно что и как
по сигнатуре не понять
всмысле alias сам по себе может много чего принимать
в документации к каждой конкретной функции пишется что он принимает

Dmitry
19.12.2016
14:02:16
А есть способ во время итерации производить сравнение с предыдущим элементом?

Oleg
19.12.2016
14:03:01
на вскидку не припомню такого

Admin
ERROR: S client not available

Oleg
19.12.2016
14:03:12
но есть способы генерировать последовательности
на основе нескольких предыдущих элементов
типа чисел фибаначи
диапазон bool?
первый тогда с чем сравнивать?

Dmitry
19.12.2016
14:28:48
ну что-то около этого. Допустим найти в ряду превышение больше чем на 2

Oleg
19.12.2016
14:29:37
всмысле [2, 3, 4, 8] -> [false, false, true]
?

Dmitry
19.12.2016
14:30:39
ну вот я думаю... или номер того элемента на котором произошло превышение значения

Google

Oleg
19.12.2016
14:31:14
мне кажется в очередной раз задача решается не тем подходом, который следует
если тебе нужен такой range, то можно написать его самому
только вот нужен ли он тебе такой?

Dmitry
19.12.2016
14:36:40
ну я пока просто теорией интересуюсь. Просто как проще всего в ряду искать скачки?

Oleg
19.12.2016
14:46:55
а что тебе с ними делать надо?
фильтровать?
можно сразу фильтр написать
auto last = range.front;
range.popFront;
foreach (val; range)
{
if (val - last > 1)
writeln("ooops");
last = val;
}

Dmitry
19.12.2016
14:48:37
Просто потом их нужно будет подкрасить т.е. хочу в браузер их отдавать в виде json
О красиво!

Oleg
19.12.2016
14:48:57
да нет, просто в лоб
но, я думаю, это самое простое и расширяемое решение

Dmitry
19.12.2016
14:49:49
range.popFront чnо делает?

Oleg
19.12.2016
14:50:09
map, each, filter и остальную комашку использовать стоит когда ты хочешь что-то написать, что ты точно знаешь как будет работать и просто не хочешь тратить много кода

Dmitry
19.12.2016
14:50:51
ну так примерно...

Oleg
19.12.2016
14:51:12
там есть 2 обязательных свойства и 1 обязательный метод
это для обычного InputRange
bool empty — показывает пустой ли диапазон
SomeType front — первый элемент диапазона
void popFront() — вытолкнуть (убрать, удалить) первый элемент
получается примерно так
auto a = [1,2,3];
a.popFront();
writeln(a); // [2,3]

Dmitry
19.12.2016
14:56:04
А я могу так записать?
writeln(arr.popFront());

Oleg
19.12.2016
14:56:37
нет