Size: a a a

2020 June 30

AD

Anastasiya Dyachenko in pro.elixir
Eugene
Ну хорошо, давайте уточним терминологию. Вот, например, нужно написать функцию, которая в множестве натуральных чисел от 100 до 1000 найдёт общее количество чисел, которые в своём десятичном написании одновременно содержат цифры 2 и 3 (например, число 203). Как это решить (не влезая в дебри теории чисел), акромя как последовательным перебором числа за числом? Подобный перебор будет реализован через рекурсию, так? И чем такой перебор терминологически правильно назвать? "cycle realised through recursion"?
можно реализовать и циклом и рекурксией -

цикл
for i <- 100..1000 do
 if  i |> to_string() |> String.contains?("2") and i |> to_string() |> String.contains?("3") do
   i
 else
   nil
 end
end


рекурсия

def process([], result), do: result
def process([head | tail], result) do
 if  i |> to_string() |> String.contains?("2") and i |> to_string() |> String.contains?("3") do
   process(tail, [i | result])
 else
   process(tail, result)
 end
end

process(100..1000, [])
источник

E

Eugene in pro.elixir
Хорошо, заказчик ставит задачу применить самый "лобовой" метод — последовательный перебор. И чтобы этот перебор был реализован через рекурсию. Что это будет? "Cycle"?
источник

AD

Anastasiya Dyachenko in pro.elixir
Anastasiya Dyachenko
можно реализовать и циклом и рекурксией -

цикл
for i <- 100..1000 do
 if  i |> to_string() |> String.contains?("2") and i |> to_string() |> String.contains?("3") do
   i
 else
   nil
 end
end


рекурсия

def process([], result), do: result
def process([head | tail], result) do
 if  i |> to_string() |> String.contains?("2") and i |> to_string() |> String.contains?("3") do
   process(tail, [i | result])
 else
   process(tail, result)
 end
end

process(100..1000, [])
не стала писать Enum чтобы не начинать новые споры, но имхо без залезания под капот если заменить for на Enum, это все еще будет цикл
источник

LL

Lama Lover in pro.elixir
Anastasiya Dyachenko
не стала писать Enum чтобы не начинать новые споры, но имхо без залезания под капот если заменить for на Enum, это все еще будет цикл
Хвостовая рекурсия это цикл, но вот сама по себе рекурсия не цикл :\
источник

AD

Anastasiya Dyachenko in pro.elixir
окей, в любом случае речь не об этом
источник

E

Eugene in pro.elixir
... и ещё заказчик ставит условие не использовать встроенные фунцкии всяких Enum. Только арифметика, только хардкор!
источник

AD

Anastasiya Dyachenko in pro.elixir
Eugene
... и ещё заказчик ставит условие не использовать встроенные фунцкии всяких Enum. Только арифметика, только хардкор!
вы видимо не поняли смысл Enum, она никак не помогает в вашей задаче, всего лишь еще один способ перебора
источник

E

Eugene in pro.elixir
Заказчик эту сущность и запретил к применению, так не понимает её смысла! Заказчик всегда прав!!
источник

AD

Anastasiya Dyachenko in pro.elixir
... ну как бы в примере ее и нет. так суть ясна или нужны еще какие-то пояснения?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Eugene
Заказчик эту сущность и запретил к применению, так не понимает её смысла! Заказчик всегда прав!!
Скопирую тогда себе код этой функции из стандартной либы и вызову ее все равно
источник

AM

Aliaksandr Martsinov... in pro.elixir
вообще то заказчик требует решить эту задачу на вордпрессе
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Но вообще заказчик лезущий в код - странная херня
источник

LL

Lama Lover in pro.elixir
Eugene
Ну хорошо, давайте уточним терминологию. Вот, например, нужно написать функцию, которая в множестве натуральных чисел от 100 до 1000 найдёт общее количество чисел, которые в своём десятичном написании одновременно содержат цифры 2 и 3 (например, число 203). Как это решить (не влезая в дебри теории чисел), акромя как последовательным перебором числа за числом? Подобный перебор будет реализован через рекурсию, так? И чем такой перебор терминологически правильно назвать? "cycle realised through recursion"?
А где здесь функция-то? хехе
источник

E

Eugene in pro.elixir
На примере этой задачи мы рассматриваем самый примитивный случай, чтобы прийти к соглашению — что же такое "cycle"?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Функция отображает область определения в область значений.

Функция с константной областью определения соответственно сама константа
источник

LL

Lama Lover in pro.elixir
Eugene
На примере этой задачи мы рассматриваем самый примитивный случай, чтобы прийти к соглашению — что же такое "cycle"?
А где ты слово "cycle" нашёл?
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Функция отображает область определения в область значений.

Функция с константной областью определения соответственно сама константа
Так у этой "функции" нет области определения...
источник

ŹR

Źmićer Rubinštejn in pro.elixir
С точки зрения бизнеса задача делится на несколько пунктов:


1. Функция, которая определяет, подходит ли число под определенный критерий:

Int -> Bool

2. Фильтрация набора входных параметров согласно этому определению

[Int] -> [Int]

3. Агрегация результата в скаляр

[Int] -> Int
источник

DS

Dmitry Shpagin in pro.elixir
Eugene
На примере этой задачи мы рассматриваем самый примитивный случай, чтобы прийти к соглашению — что же такое "cycle"?
Цикл в общем понимании - то, что Анастасия писала и кидала ссылку на wiki. Но в Elixir, если нас волнуют детали и способы реализации, то стоит уточнять детали с помощью точных названий: рекурсия, модуль enum, for и т.д
источник

DS

Dmitry Shpagin in pro.elixir
Потому что если ты мне скажешь использовать cycle, я могу подумать про Stream.cycle, и решить задачу через одно место
источник