2015-03-16 4 views
0

Мне нужно написать программу, которая принимает целое число, а затем использует два частичных приложения для первого увеличения числа на единицу, а затем второе частичное приложение удваивает его. Я знаю, что частичное приложение будет таким, которое будет принимать меньше аргументов, чем указано, но для каждого из этих частичных приложений требуется только один вход. Означает ли это, что я не передаю ни одно из частичных приложений? Это действительно кажется неправильным/странным для меня. Любая помощь на том, где начинать на частичных приложений было бы весьма признателенЧастичные приложения Haskell для добавления 1 и double

+2

Это не совсем понятно, что вы хотите. Не могли бы вы написать какой-нибудь псевдокод, чтобы продемонстрировать, какое поведение вам нужно? Возможно, вы пытаетесь решить проблему неправильно, поскольку частично применяемая функция все еще является функцией, а не целочисленным значением. Вы, кажется, заметили путаницу, в которой вы хотите частично применить что-то только из одного аргумента, так что вы можете подробнее рассказать о своей проблеме? – bheklilr

+1

Почему вы удалили исходный текст проблемы? – dfeuer

+0

Я смог решить вопрос в ответе, который я представил на вопрос. – Nived

ответ

1

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

add a b = a + b 
add_one = add 1 

Вы берете функцию, чтобы добавить два числа и частично применять его с одним, так что теперь у вас есть функция, которая добавляет один к номер. Тот же принцип применяется к удвоению.

multiply a b = a * b 
double = multiply 2 

Функция удвоения всего лишь частично применяется к умножению. Чтобы объединить их, вы можете использовать функциональную композицию:

doubleIncr = multiply 2 . add 1 

Надеюсь, это поможет!

+0

Итак, как я могу запускать их в последовательности ... например, частично применять добавление и умножение в одной функции? – Nived

+0

@DevinHolland 'add_one_then_double = double. add_one' – zerkms

+0

Вы можете просто применить обе новые функции к значению, например, 'double (add_one 2)', чтобы применить его к значению 2. Если вы хотите создать функцию для их последовательного выполнения, вы можете использовать функцию композиции , например: 'increment_double = double. add_one' Эта нотация создала новую функцию, которая последовательно выполняет функции, разделенные периодами справа налево. – charleyh

1

Ваше задание почти наверняка прошу вас использования частичное применение чего-то еще в реализовать «приращение на единицу» и «двойные» операции. Он не просит вас частично применять эти операции.

Например, в названии этого самого вопроса вы написали «add 1», чтобы означать вашу операцию увеличения; это не просто частичное применение операции добавления (которая принимает две операции) к одному аргументу (а именно 1) для получения операции, которая принимает только один аргумент?

 Смежные вопросы

  • Нет связанных вопросов^_^