Мне нужно написать программу, которая принимает целое число, а затем использует два частичных приложения для первого увеличения числа на единицу, а затем второе частичное приложение удваивает его. Я знаю, что частичное приложение будет таким, которое будет принимать меньше аргументов, чем указано, но для каждого из этих частичных приложений требуется только один вход. Означает ли это, что я не передаю ни одно из частичных приложений? Это действительно кажется неправильным/странным для меня. Любая помощь на том, где начинать на частичных приложений было бы весьма признателенЧастичные приложения Haskell для добавления 1 и double
ответ
Похоже, вы должны использовать функции, которые принимают два аргумента и частично применяют их для получения функций, которые принимают один аргумент. Для увеличения числа на один, используя частичное приложение, вы можете сделать что-то вроде этого:
add a b = a + b
add_one = add 1
Вы берете функцию, чтобы добавить два числа и частично применять его с одним, так что теперь у вас есть функция, которая добавляет один к номер. Тот же принцип применяется к удвоению.
multiply a b = a * b
double = multiply 2
Функция удвоения всего лишь частично применяется к умножению. Чтобы объединить их, вы можете использовать функциональную композицию:
doubleIncr = multiply 2 . add 1
Надеюсь, это поможет!
Итак, как я могу запускать их в последовательности ... например, частично применять добавление и умножение в одной функции? – Nived
@DevinHolland 'add_one_then_double = double. add_one' – zerkms
Вы можете просто применить обе новые функции к значению, например, 'double (add_one 2)', чтобы применить его к значению 2. Если вы хотите создать функцию для их последовательного выполнения, вы можете использовать функцию композиции , например: 'increment_double = double. add_one' Эта нотация создала новую функцию, которая последовательно выполняет функции, разделенные периодами справа налево. – charleyh
Ваше задание почти наверняка прошу вас использования частичное применение чего-то еще в реализовать «приращение на единицу» и «двойные» операции. Он не просит вас частично применять эти операции.
Например, в названии этого самого вопроса вы написали «add 1», чтобы означать вашу операцию увеличения; это не просто частичное применение операции добавления (которая принимает две операции) к одному аргументу (а именно 1) для получения операции, которая принимает только один аргумент?
Это не совсем понятно, что вы хотите. Не могли бы вы написать какой-нибудь псевдокод, чтобы продемонстрировать, какое поведение вам нужно? Возможно, вы пытаетесь решить проблему неправильно, поскольку частично применяемая функция все еще является функцией, а не целочисленным значением. Вы, кажется, заметили путаницу, в которой вы хотите частично применить что-то только из одного аргумента, так что вы можете подробнее рассказать о своей проблеме? – bheklilr
Почему вы удалили исходный текст проблемы? – dfeuer
Я смог решить вопрос в ответе, который я представил на вопрос. – Nived