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