
Can
20.01.2017
04:17:32
Прост моя позиция по веществам - если тебе надо выискивать эффект то это тлен
Если эффект есть то он сам тебя выискивает

Константин
20.01.2017
04:18:09
http://zapomnivse.com/stati/polezno/preparati-dlya-pamyati-i-mozga.html

Can
20.01.2017
04:18:13
Вот во всех ноотропах и проч мне приходилось выискивать эффект

Google

Can
20.01.2017
04:18:35
Вообще лучше всего для прокачки мозгов помогает сессия
Две недели адской математики это как в зал сходить для мозга
После этого и запоминается и думается хорошо

Rustam
20.01.2017
04:36:52

Taras ?
20.01.2017
05:31:32

Константин
20.01.2017
05:32:24
книга из будущего
2017-03-25

Taras ?
20.01.2017
05:32:48
?

Aldar
20.01.2017
05:35:42
Чтобы познать ФП нужно хаскель попробовать я считаю

Can
20.01.2017
05:43:57
Благодарю

Rafkat
20.01.2017
05:45:01
А Elm?

Rustam
20.01.2017
05:45:43
Мне последнее время не нравятся книги орейли из цикла Introducing Слишком обобщенная информация, толком ничего не понятно.

Can
20.01.2017
06:19:45
Я тут про Телеграм бэкап заливал кому то говорил сервис хороший получится

Google

Aldar
20.01.2017
06:23:17
https://altoros.wistia.com/medias/1aj7m8o1n6

anton
20.01.2017
07:32:49

Alexander
20.01.2017
07:34:38
Вот, что значит хорошая память!

anton
20.01.2017
07:35:30
память да, а моторика нет? может он там последовательно идет и читает сообщения. но медленно...
https://www.erlang-in-anger.com

Ivan
20.01.2017
08:33:53
@grach приветы)

Alex
20.01.2017
08:41:49
Есть какая то альтернатива acts_as_taggable под phoenix?

Viza
20.01.2017
11:25:08
# cycle
def generate(user, count) do
list = []
for i <- 1..count do
{:ok, player} = Ecto.build_assoc(user.team, :players)
|> Player.changeset(generate(user))
|> Repo.insert
list = [list | player]
end
end
# recursion
def generate(user, count, counter \\ 0, list \\ []) do
if counter < count do
{:ok, player} = Ecto.build_assoc(user.team, :players)
|> Player.changeset(generate(user))
|> Repo.insert
generate(user, count, counter+1, [list | player] )
else
list
end
end
Надо создать указанное количество юзеров. Как лучше, через for или рекурсию? Мб чето исправить?

Artem
20.01.2017
11:32:28
в рекурсивном виде проще передавать счетчик через аргумент, и сделать отдельно функцию если counter 0, ну и list тоже через аргумент, в общем все через аргументы передавать нужно. аргумент каунтер не нужен, просто минусовать count при вызове следующем

Dmitry
20.01.2017
11:33:43
Проще использовать for для range
"У нас же функциональный язык, давайте везде сувать рекурсию!"

Viza
20.01.2017
11:34:56
тоже думаю что for тут лучше, не надо думать куда там рекурсия зашла

Artem
20.01.2017
11:35:28
да она все равно сведется к итерации при правильной готовке

Viza
20.01.2017
11:35:43
И еще, у for же внутри своя область видимости? почему тогда если в конце написать inspect(list) он все равно пустой, но при этом без list = [] оно не работает?

Dmitry
20.01.2017
11:38:00
У рекурсии есть 2 проблемы, которые работают не во всех, а в большинстве алгоритмов:
-Рекурсия без кеширования работает хуже итерации.
-Если в рекурсию надо делать TCO путём добавления агрегатора - прелесть рекурсии теряется.
+ High order function сделаны рекурсивно и их достаточно для того чтобы решить все ваши проблемы. Исключение - если функция не чистая ( типа скачивать по ходу работы новые данные )

Artem
20.01.2017
11:39:31
при рекурсивном виде у нас запись получается декларативная, при for императивная. ну и да, тут пройтись через map тоже краше выйдет(декларативная запись мне приятнее)

Viza
20.01.2017
11:41:10
def generate(user, 0, list), do: list
def generate(user, count, list \\ []) do
{:ok, player} = Ecto.build_assoc(user.team, :players)
|> Player.changeset(generate(user))
|> Repo.insert
generate(user, count-1, [list | player] )
end
вот в целом поприятнее. без counter и if
сейчас с map попробую

Dmitry
20.01.2017
11:41:25

Google

Dmitry
20.01.2017
11:42:33
В рекурсии "сперва сделать что-то, потом прибавить к аггрегатору, потом вызвать самого себя"
А в HOF - применить функцию изменения данных к каждой единице данных и все

Artem
20.01.2017
11:43:58
да, согласен про hof vs recursion не согласен про итерацию через for

Dmitry
20.01.2017
11:44:21
For - тот же map
Только ты не собираешь в список результаты

Viza
20.01.2017
11:49:07
def generate(user, count) do
Enum.map 1..count, fn (i) ->
Ecto.build_assoc(user.team, :players)
|> Player.changeset(generate(user))
|> Repo.insert
end
end
думаю норм

Dmitry
20.01.2017
11:51:13
Я бы вынес результат map в repo.insert_all/3
И generate как то не может называться та и та функция

Viza
20.01.2017
11:54:58
Там все равно не будет больше 3-5 вставок, в целом можно было бы с insert_all

Artem
20.01.2017
11:56:26
я просто на js перегрелся, перепутал с for i =0 ; i < len; i++

Artem
20.01.2017
11:56:37
а так да, такой фор отличный

Dmitry
20.01.2017
11:58:06

Denis
20.01.2017
11:59:12
тигры elixir'a
почему феникс говно?
уже 3 раз здесь об этом упоминается
мап строит мап и хранит результат каждой итерации
def generate(user, count) do
Enum.map 1..count, fn (i) ->
Ecto.build_assoc(user.team, :players)
|> Player.changeset(generate(user))
|> Repo.insert
end
end
это не чистый фор с C-like

Google

Denis
20.01.2017
12:05:59
Enum.each тут лучше подходит

Dmitry
20.01.2017
12:12:01
В эликсире for тоже есть

Nikita
20.01.2017
12:12:57

Viza
20.01.2017
12:13:10
не. each не подойдет, нужен потом этот список созданных записей

Aldar
20.01.2017
13:19:14

Viza
20.01.2017
13:19:27
ну типо того

Aldar
20.01.2017
13:19:39
мб insert_all воспользоваться?

Admin
ERROR: S client not available

Viza
20.01.2017
13:19:53
он с ченжсетами не работает

Aldar
20.01.2017
13:20:23
да, то так получается вставка по одному через цикл, что не очень эффективно

Viza
20.01.2017
13:20:46
ну там не более 3-5 записей, а преждевременная оптимизация - зло

Aldar
20.01.2017
13:20:55
окей, тогда норм

Viza
20.01.2017
13:22:08
https://github.com/lubien/elixir-telegram-bot-boilerplate/blob/master/lib/app/commander.ex
когда очень любишь макросы
пример как не надо ими пользоваться)
вот еще https://github.com/lubien/elixir-telegram-bot-boilerplate/blob/master/lib/app/router.ex
в эликсире есть аналог рубишной *? Чтоб [first, second] передать в функцию как два аргумента

Andrey
20.01.2017
14:11:10
tuple, не?

Dmytro
20.01.2017
14:12:48
@Vizakenjack попробуйте пример показать, сложно понять что именно нужно

Google

Aldar
20.01.2017
14:14:47

Viza
20.01.2017
14:15:42
iex(3)> func = fn (a, b) -> a+b end
#Function<12.52032458/2 in :erl_eval.expr/5>
iex(4)> list = {1, 2}
{1, 2}
iex(5)> func.(list)
** (BadArityError) #Function<12.52032458/2 in :erl_eval.expr/5> with arity 2 called with 1 argument ({1, 2})
iex(5)> func = fn ({a, b}) -> a+b end
#Function<6.52032458/1 in :erl_eval.expr/5>
iex(6)> func.(list)
3
вот так работает да

Alexey
20.01.2017
15:05:31
@Vizakenjack
iex(1)> func = fn (a, b) -> a + b end
iex(2)> apply(func, [1, 2])
=> 3

Viza
20.01.2017
15:22:38
да, отличный вариант. но я все-таки решил избавиться от такой передачи параметров

Can
20.01.2017
17:46:07
можно еще
fn({b,c}) - > b+c end
d = {3,5}
fn(d)
но это все от смсла должно отталкиваться, если это две координат точки например, то имеет смсл их туплом делать.
если нет то через апплай

Dmitry
20.01.2017
17:47:56
Не надо так делать
Потом не зарефакторишь, тесты же ты не пишешь?)
В идеале defstruct конечно

Can
20.01.2017
17:48:50
не ну бвают случаи когда надо передать аргументы которые пришли
далее
если обертки какие-нибудь пишешь
так то понятно что в обычных кейсах надо все аргументы по отдельности предавать
по обычному

Константин
21.01.2017
04:32:27
Считаю, что for был придуман для использования фильтров при итерации. Если результат итерации возвращать не нужно, тогда надо использовать each

Alexander
21.01.2017
07:10:16
все уже видели? https://github.com/koudelka/honeydew
прямо круто же
крутая часть про перманент воркеры, как пример - есть нужда открыть коннект на порт и слать туда по мере нужды

Can
21.01.2017
08:21:46
Красота