Главная Макинтош Регистрация

Вход

Приветствую Вас Гость | RSSВторник, 26.09.2017, 08:34
Наш опрос
Оцените мой сайт
Всего ответов: 3

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа


Главная » 2013 » Октябрь » 8 » Point-free function application in F#
11:35
Point-free function application in F#
В коммуне по-прежнему тихо, потому подумалось, что эта мини-статья будет кому-то интересна. Не все знают, как использовать duck-typing для применения не-последнего аргумента.
Модератору: не знаю, какие метки ставить. :( И не знаю: а ссылки на SO вообще можно, да? :-)

Originally posted by bytebuster463 at Point-free function application in F%23Pointless notation in F%23 is a powerful mechanism for coding, allowing the source be free of burdening arguments. Combined with strong typing it makes F%23 code very expressive.
Say you have ( ) operator which has type of int -> int -> int.
You may define your custom function:

let add2_version1 x = x 2

This function will have type of int -> int which means it takes an int and returns an int.
This syntax is equal to:

let add2_version2 x = ( ) 2 x

or

let add2_version3 x = (( ) 2) x

As we see, (( ) 2) is a function itself, and x is applied to it. So we can simplify our function:

let add2_version4 = ( ) 2

But what if our operator is not symmetric, and we need to apply the first argument? Look at this question on StackOverflow:

How can I create a partial function application for a non-symmetric operator such as the modulus operator with regards to the first argument without any argument names in F%23? My first attempt was let mod10 = (%) 10 which of course translates to mod10(x) = 10 mod x instead of the desired mod10(x) = x mod 10.

Certainly, this is possible!

let mod10 = (%) >> (|>) 10

How did we get it? Simple! The following expressions are equal:let m1 x = x % 10                    
let m2 x = (%) x 10                  // x (op) y = (op) x y
let m3 x = ((%) x) 10                // f x y = (f x) y
let m4 x = 10 |>         ((%) x)     // f x = x |> f
let m5 x = ((|>) 10)     ((%) x)     // x |> f = (|>) x f
let m6 x = ((%) x)    |> ((|>) 10)   // f x = x |> f
let m7 x = (x |> (%)) |> ((|>) 10)   // (op) x = x |> (op)
let m8 x = x |> ((%)  >> ((|>) 10))  // f(x) |> g = x |> (f >> g)
let m9   =       (%)  >> ((|>) 10)   // remove formal argument
let m10  =       (%)  >>  (|>) 10    // remove unnecessary parenthesis

ЗЫ. Если Вам понравилась эта статья, можно лайкнуть по ссылке :-)
Роскошные изделия из серебра по вполне разумным ценам можно заказать на сайте http://oringo.com.ua/ интернет магазина ювелирных украшений Оринго просто не выходя из дома.
Просмотров: 4260 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Календарь
«  Октябрь 2013  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Архив записей

Copyright MyCorp © 2017Хостинг от uCoz