Получение противоположного логического вывода анонимных функций [SML] - PullRequest
0 голосов
/ 30 ноября 2018

Часть решения, я пытаюсь найти способ преобразовать значение логической анонимной функции в ее противоположность.например, у меня есть функция f, которая выглядит следующим образом: fn x => x > 8.Я хотел бы, чтобы какой-то оператор, например not, преобразовал бы вывод в противоположный, поэтому анонимный оператор фактически вычислит fn x => x <= 8.Примерно так:

fun foo f x = not f x;

Но это не сработает, потому что not работает только с логическими значениями.Я знаю, что могу сделать это следующим образом:

fun foo f x = if f x then false else true;

Но я хочу как-то сделать это в одной строке без ifs.Возможно ли это?

1 Ответ

0 голосов
/ 30 ноября 2018

Уже есть not, который может быть составлен с помощью предиката, например:

val isntSpace = not o Char.isSpace

В Базовой библиотеке OCaml есть функция Fn.non, который делает это:

fun non f x = not (f x)

Кажется, что вы были всего лишь в скобках от этого.

Это позволит вам написать:

val isntSpace = non Char.isSpace
...