Как мы можем преобразовать функцию без параметра в функцию с одним параметром? - PullRequest
0 голосов
/ 02 июля 2019

https://www.slideshare.net/ScottWlaschin/fp-patterns-ndc-london2014 говорит

Плохие новости: Шаблоны композиции работают только для функций с одним параметром!

Хорошие новости!Каждая функция является функцией с одним параметром!

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

let add x y = x + y 
let add x = (fun y -> x + y)

let add1 = (+) 1  
let three = add1 2 

Как преобразовать функцию без параметра в функцию с одним параметром?

1 Ответ

7 голосов
/ 02 июля 2019

Нет функций без параметров, и нет преобразования с многопараметрическими функциями. Как говорится в цитате, «каждая функция является однопараметрической функцией». Всегда есть только один параметр, не больше и не меньше.

То, что вы можете рассматривать как функцию без параметров, - это, вероятно, функция, которая принимает один параметр типа unit:

let f () = ...

Тип unit имеет только одно значение, () (которое также называется «единицей»), следовательно, оно не несет никакой информации, но технически это значение. Вы можете думать об этом как о пустом кортеже.

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

let f a b = ...
let f = fun a -> fun b -> ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...