Есть ли название для этой частичной прикладной программы, как метод функционального программирования? - PullRequest
2 голосов
/ 02 июня 2011

У меня есть функция f: (a, b, c = 5, d = 0) -> {...}, которая принимает от 2 до 4 аргументов.

Я хочу передать «связанную» версию этой функции, которая всегда использует значения по умолчанию для последних аргументов, но использует конкретные значения(скажем 1 и 2) для первых двух аргументов.То есть я хочу g: () -> f(1, 2).

Если бы я подал частичную заявку, я бы получил g': (c = 5, d = 0) -> f(1, 2, c, d).То есть, частичное применение не обеспечит принудительную природу g с нулевым аргументом, которую я желаю, вместо этого предоставив мне g', который принимает от 0 до 2 аргументов.

Какой метод получения g с f звонил, если что?

1 Ответ

2 голосов
/ 03 июня 2011

Публикация моего комментария в качестве ответа: кажется, что этот вопрос не имеет ничего общего с функциональным программированием или каррированием или частичным применением, но вместо этого касается именно принятия функции, которая принимает необязательные аргументы со значениями по умолчанию, и создания новой функции снет необязательных аргументов, в которых аргументы по умолчанию были исправлены.

Назовите это концептуальное преобразование 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 точки, чтобы иметь стандартное имя, но что-то вроде «исправление / связывание аргументов по умолчанию» должно подойти.

...