F#, передающий оператор с аргументами функции

Вы видите различие со следующим примером:

<a href="http://www.google.co.uk/" onclick="return (confirm('Follow this link?'))">Google</a>

Нажатие "Okay" возвращает true, и по ссылке переходят. Нажатие на "Cancel" возвращает false и не переходит по ссылке. Если JavaScript отключен, по ссылке обычно переходят.

10
задан Jon Seigel 7 April 2010 в 01:18
поделиться

3 ответа

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

let flip f x y = f y x

List.map (flip (-) 1) [2;4;6]

Возможно, у меня неправильный синтаксис, я плохо владею F #.

14
ответ дан 3 December 2019 в 14:34
поделиться

Есть никаких «секций операций» в F #, а-ля Haskell, ни аргументов-заполнителей (очевидно, а-ля Arc). Вы можете использовать комбинатор «переворота», как предложено в другом ответе, чтобы изменить порядок аргументов и затем частично применить первый (теперь второй) аргумент.

Но я бы просто использовал

fun x -> x / 2

Если вы не играете в код-гольф , Не думаю, что попытка избавиться от еще нескольких персонажей здесь ничего вам даст.

10
ответ дан 3 December 2019 в 14:34
поделиться

Решение flip , предложенное Логаном Капальдо , также можно записать с помощью оператора (здесь >. ):

let (>.) x f = (fun y -> f y x)
List.map (1 >. (-)) [2;4;6]

Или, если вы предпочитаете операнды наоборот:

let (>.) f x = (fun y -> f y x)
List.map ((-) >. 1) [2;4;6]

Изменить: Использование оператора, который «больше похож на заполнитель» (здесь > - <), очень приближает вас к вашему предлагаемый синтаксис:

List.map ((-) >-< 1) [2;4;6]

'_', к сожалению (?) не допустимый символ оператора в F # .

9
ответ дан 3 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: