Ваша компания только начинает работу над проектом, и вы впервые решили использовать стиль кода функционального программирования. Однако ваш начальник действительно неуверен в себе и не хочет использовать встроенные функции, а требует от вас реализации основных функций. В частности , вы должны написать функции: 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, так как она просто применяет функцию к диапазону.