OCaml: каррирование без определенных значений - PullRequest
4 голосов
/ 29 апреля 2010

У меня есть две функции f и g, и я пытаюсь return f(g(x)), но я не знаю значения x, и я не совсем уверен, как это сделать.

Более конкретный пример: если у меня есть функции f = x + 1 и g = x * 2, и я пытаюсь return f(g(x)), я должен получить функцию, равную (x*2) + 1

1 Ответ

5 голосов
/ 29 апреля 2010

Похоже, у вас все правильно, f(g(x)) должно работать нормально. Я не уверен, почему у вас есть ключевое слово return (это не ключевое слово в ocaml). Вот правильная версия,

let compose f g x = f (g x)

Определение типа для этого,

val compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun>

Каждый, 'a,' b, 'c являются абстрактными типами; нам все равно, кто они, они просто должны быть последовательными в определении (поэтому область g должна находиться в диапазоне f).

let x_plus_x_plus_1 = compose (fun x -> x + 1) (fun x -> x * 2) 
...