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