Публикация моего комментария в качестве ответа: кажется, что этот вопрос не имеет ничего общего с функциональным программированием или каррированием или частичным применением, но вместо этого касается именно принятия функции, которая принимает необязательные аргументы со значениями по умолчанию, и создания новой функции снет необязательных аргументов, в которых аргументы по умолчанию были исправлены.
Назовите это концептуальное преобразование T
.Предполагая по какой-то причине, что частичное применение означает, что необязательные аргументы остаются необязательными (которые не обязательно должны быть универсальными, но, опять же, знакомые функциональные языки программирования - Haskell и т. Д. - даже не имеют необязательных аргументов),есть как минимум два способа получить g
из f
.
- Взять
f: (a, b, c = 5, d = 0) -> {....}
, который принимает от 2 до 4 аргументов. - Создать новоефункция
T(f) : (a,b) -> {...}
, которая принимает ровно 2 аргумента.То есть T(f)(a,b) = f(a,b) = f(a,b,5,0)
. - Теперь выполните частичное применение к T (f), исправив два аргумента как 1 и 2, и вызовите результирующую функцию
g
.То есть g() = T(f)(1,2) = f(1,2) = f(1,2,5,0)
.
- Возьмите
f: (a, b, c = 5, d = 0) -> {....}
, который принимает от 2 до 4 аргументов. - Выполните частичное применение
f
, исправив его первые два аргумента как 1 и2, и вызовите полученную функцию g'
.То есть g' : (c=5, d=0) -> f(1, 2, c, d)
.Он принимает от 0 до 2 аргументов. - Создает новую функцию
T(g) : () -> {....}
, которая принимает ровно 0 аргументов.То есть T(g)() = g'() = g'(5, 0) = f(1, 2, 5, 0)
.
В любом случае, вопрос в данном вопросе, кажется, зависит от T
, а не от какого-либо аспекта функционального программирования или каррирования или частичногоприложение.Я не знаю, достаточно ли у T
точки, чтобы иметь стандартное имя, но что-то вроде «исправление / связывание аргументов по умолчанию» должно подойти.