Как я могу написать определения функций, которые имеют следующие типы OCaml - PullRequest
0 голосов
/ 01 ноября 2018

Я изучаю языки программирования, и в этом курсе мы изучаем некоторый OCaml. Мне нужно определение функции этого типа OCaml.

('a -> 'a -> 'b) -> 'a -> ('a -> 'b) * 'b 

Как я могу написать функцию этого типа ocaml? Я попробовал некоторые функции, и одна из них была очень близка, и это

let func x y = (x, (x y));;

это дает

val func : ('a -> 'b) -> 'a -> ('a -> 'b) * 'b = <fun>

я запутался в первой части; ('a -> 'a -> 'b) функция принимает 'a и' a и 'b (' средство должно быть любого типа)

1 Ответ

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

Тип ('a -> 'a -> 'b) -> 'a -> ('a -> 'b) * 'b - это тип функции, которая принимает два аргумента.

Первый аргумент - это сама функция, которая принимает два значения произвольного типа 'a и возвращает элемент некоторого произвольного типа 'b (который также может быть 'a, т.е. он не ограничен).

Второй аргумент - это значение типа 'a, которое принимается функцией, передаваемой в качестве первого аргумента.

Возвращаемое значение - пара. Первая составляющая пары - это унарная функция, которая принимает аргумент типа 'a и возвращает значение типа 'b. Вторая составляющая является значением типа 'b.

Вы должны думать об этой задаче, как о головоломке. У вас есть только два инструмента: функция ('a -> 'a -> 'b) и значение типа 'a. Так что вопрос в том, какие операции вы должны выполнить с этими двумя значениями, чтобы получить результат

Подсказка1: начать с оператора приложения функции.

Подсказка2: ответ очень прост и мал, поэтому, если вы получаете что-то очень большое, то вы на неверном пути.

...