F # Lambda Signature - PullRequest
       2

F # Lambda Signature

1 голос
/ 30 сентября 2011

Я сейчас читаю Программирование F # Криса Смита, сейчас пытаюсь выяснить F #, когда я сталкиваюсь с Ламбадами.Вот лямбда из одного из примеров

let generatePowerOfFunc base = (fun exponent -> base ** exponent);;

Я получаю, что он принимает что-то и возвращает функцию, но я не получаю, это Подпись этой функции, которая val generatePowerOfFunc : float -> float -> float

Как у него три поплавка вместо двух?И когда есть этот метод

let powerOfTwo = generatePowerOfFunc 2.0;;

Он имеет только 2 числа с плавающей запятой val powerOfTwo : (float -> float)

Возможно, я не получаю всю подпись типа сделкиЛюбая помощь приветствуется.Спасибо

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

В дополнение к kongo2002:

Последний элемент в цепочке -> является return type, , а не другим аргументом. Первый принимает два числа с плавающей точкой и возвращает число с плавающей точкой, а второй принимает одно число с плавающей точкой и возвращает одно.

Идея сделать это так, а не что-то вроде (float, float) : float, заключается в том, что вы можете использовать концепцию, называемую "карри". generatePowerOfFunc имеет тип float -> float -> float, что эквивалентно float -> (float -> float), поэтому мы можем дать ему один float и вернуть функцию типа float -> float (и мы можем дать ему еще один float и вернуть обратно float ).

Это означает, что когда вы звоните generatePowerOfFunc 2. 4., вы применяете дважды . После того, как вы примените 2., и после того, как вы примените 4..

2 голосов
/ 30 сентября 2011

Функция generatePowerOfFunc принимает два аргумента типа float и возвращает значение float:

val generatePowerOfFunc : float -> float -> float
//                        ^^^^^^^^^^^^^^
//                        arguments
//                                          ^^^^^
//                                          return value

Функция powerOfTwo подобна частичному приложению функции, которое просто принимает один float аргумент (показатель степени) и возвращает float.

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