Форум программистов, компьютерный форум, киберфорум
Наши страницы
F# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
megabax
10 / 10 / 6
Регистрация: 06.08.2009
Сообщений: 345
1

Для чего нужно каррирование?

06.01.2015, 10:57. Просмотров 2838. Ответов 7
Метки нет (Все метки)

Добрый день. Я начал изучать язык F#, дошел до такой фишки как каррирование, вроде понял, что это такое - применение аргументов по одному. Но вот для чего это может понадобиться, для меня пока загадка. Разъясните, пожалуйста, в каких случаях применяется каррирование?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2015, 10:57
Ответы с готовыми решениями:

Для чего применяется Каррирование в языках высокого уровня?
Добрый день, гуру функционального программирования! Ввиду большого интереса к теории компиляции и...

Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для чего если можно в сборках это все обьявлять.
Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для...

С чего нужно начать писать , для создания программы каталога для выбора(пример- магазин)
Разработать программу-каталог спиртных напитков в магазине. О каждом напитке хранится:...

Для чего нужно UUID
Ребят изучаю андройд совсем недавно, можете кто-нибудь понятно объяснить для чего используется UUID?

Для чего это нужно?
Вот это предупреждение предлагает добавить аннотацию Override. Если я переопределил метод или...

7
Ev_Hyper
Заблокирован
06.01.2015, 11:15 2
megabax, советую почитать Крис Смит "Программирование на F#". В книге есть примеры, по которым проще будет разобраться.

Применяется тогда, когда вам нужно зафиксировать параметр в какой-либо функции. Или другими словами использовать параметр по умолчанию.
0
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
06.01.2015, 11:18 3
как таковое оно не применяется. оно используется в то время когда требуется частичное применение функций.

F#
1
2
let fn a b c = a * b + c
[1..4] |> List.map (fn 1 2) // => [3..6]
fn карированная функция от 3-х аргументов, но в List.map используется с двумя, третий аргумент будет подствалять List.map при проходе по каждому элементу из списка [1..4], тоже самое можно записать и обычной функцией, но будет немного длинее

F#
1
2
let fn (a, b, c) = a * b + c
[1..4] |> List.map (fun x -> fn(1, 2, x)) // => [3..6]
0
Catstail
Модератор
25413 / 13041 / 2432
Регистрация: 12.02.2012
Сообщений: 21,287
06.01.2015, 21:04 4
Функциональный подход предполагает, что функции являются полноправными значениями - могут играть роль аргументов (ФВП) и возвращаться как значения. Каррирование позволяет получать из одной функции другую "на лету" (используя, как отмечает pycture, частичное применение). Про F# не скажу, но вот Хаскелл:

Haskell
1
 [(+5), (*7), (-6)]
список функций! Первая прибавляет к аргументу 5, вторая - умножает аргумент на 7, третья отнимает от аргумента 6. Разве не симпатично? И это - следствие каррирования.
0
06.01.2015, 21:04
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
06.01.2015, 22:47 5
В F# практически также. разве что MLный синтаксис более однозначный
F#
1
[(+)5; (*)7; (-)6]
1
rattrapper
foo();
875 / 577 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
10.01.2015, 20:53 6
Цитата Сообщение от Catstail Посмотреть сообщение
третья отнимает от аргумента 6
Цитата Сообщение от pycture Посмотреть сообщение
(-)6]
pycture, функция, которую вы написали, отнимает от шестерки, так как вы в функцию отнимания передаете первый (левый) аргумент
0
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
10.01.2015, 21:59 7
rattrapper, это верно. отнимается второй аргумент от 6. если в хаскеле работает по другому то вариант Catstail, к каррированной записи никакого отношения не имеет
0
Curry
3172 / 2185 / 270
Регистрация: 01.06.2013
Сообщений: 4,665
Записей в блоге: 9
18.04.2015, 21:32 8
Цитата Сообщение от pycture Посмотреть сообщение
если в хаскеле работает по другому то вариант Catstail, к каррированной записи никакого отношения не имеет
Имеет, имеет. Правда такой вариант даже не компилируется. С операцией (-) в Haskell нью-анс, он (-6) понимает как "минус шесть". Работающие варианты:
Haskell
1
2
3
[(+5), (*7), (+(-6))]
[(+5), (*7), flip (-) 6]
[(+ 5), (* 7), \ x -> x - 6]
Запись же
Haskell
1
[(+)5, (*)7, (-)6]
тоже возможна, но тогда числа - первые аргументы функций ,а не вторые.
0
18.04.2015, 21:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2015, 21:32

Для чего это нужно?
Посмотрел css файл на одном сайте, и заметил что-то типа этого ...

Сторнирование для чего нужно
Здравствуйте :) у меня вопрос по теории: для чего нужно Сторнирование применительно к...

Для чего нужно function($)
Для чего используют такую конструкцию в самом начале скрипта ? (function($) { })


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.