Ваша компания только начинает работу над проектом, и вы впервые решили использовать стиль кода функционального программирования. Однако ваш начальник действительно неуверен в себе и не хочет использовать встроенные функции, а требует от вас реализации основных функций. В частности , вы должны написать функции: Map
, Nest
, Apply
, Range
, Fold
и Table
на языке , на ваш выбор. Босс очень занятой человек, и он хочет, чтобы программы были максимально короткими, чтобы он не тратил время на чтение. Он также не хотел бы, чтобы вы использовали циклы, поэтому вы не будете использовать циклы на 10%.
Подробные требования к функциям приведены ниже:
карта
Map
Функция принимает два параметра: f
и , list
где f
функция и list
список значений. Он должен вернуть f
примененный к каждому элементу list
. Поэтому он будет работать так:
Map(f,{a,b,c})
возвращается
{ f(a), f(b), f(c) }
а также
Map(f, {{a,b},{b,c}})
возвращается
{ f({a,b}), f({b,c})}
Гнездо
Nest
Функция принимает три параметра, а: f
, arg
, times
где f
есть функция, arg
является его началом аргумента, и times
сколько раз применяются функция. Он должен вернуть выражение с f
примененным times
временем к arg
. Поэтому он будет работать так:
Nest(f, x, 3)
возвращается
f(f(f(x)))
а также
Nest(f, {a,b}, 3)
возвращается
f(f(f({a,b})))
Подать заявление
Apply
Функция принимает два параметра: f
и , args
где f
функция и args
список. Это должно относиться f
к args
. Следовательно:
Apply(f, {a,b,c})
возвращается
f(a,b,c)
Диапазон
Range
Функция принимает одно целое число r
и выводит целые числа до этого числа. Следовательно:
Range(5)
возвращается
{ 1, 2, 3, 4, 5}
складка
Fold
Функция принимает три параметра f
, arg
, others
где f
есть функция, arg
просто параметр, и others
список. Это будет работать так:
Fold(f, x, {a, b, c, d})
возвращается
f(f(f(f(x,a),b),c),d)
Стол
Табличные функции должны принимать функцию f
и параметр, называемый iterator
в виде: {iMin, iMax}
где iMin
и iMax
являются целыми числами. Вы должны подать заявку f
в указанном диапазоне. Следовательно:
Table(f, {0, 5})
возвращается
{f(0), f(1), f(2), f(3), f(4), f(5)}
Я использовал определение этих функций на странице функционального программирования Mathematica , так что, если вам нужно больше руководств, отправляйтесь туда. Обратите внимание, что вам не нужно будет реализовывать все версии функций, показанных на этой странице, а только те, которые написаны в этом посте.
Стандартные лазейки запрещены как обычно.
Если ваш язык не позволяет передавать функции в качестве аргументов, вам необходимо реализовать эту возможность и добавить ее в свой ответ. Однако количество байтов этой операции не будет добавлено к итогу.
Это кодовый гольф, поэтому выигрывает самый короткий код. Удачи!!!
Table
здесь работает. Ваш пример должен бытьTable(f, {x, 0, 5})
? Я также не понимаю целиx
, так как она просто применяет функцию к диапазону.