@dlangru

Страница 113 из 719
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 и остальную комашку использовать стоит когда ты хочешь что-то написать, что ты точно знаешь как будет работать и просто не хочешь тратить много кода

range.popFront чnо делает?
про диапазоны же знаешь?

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
нет

Страница 113 из 719