Реализация следующего с OCaml - PullRequest
1 голос
/ 29 августа 2009

Я пытаюсь реализовать следующее с OCaml для домашнего задания:

g(n) = y if n = x else f(n)

так, например

if f(n) = n+1, x = 7, y=42, then g(1) = 2, but g(7) = 42

У меня есть:

# let update f x y = f(x) = y;;
val update : ('a -> 'b) -> 'a -> 'b -> bool = < fun>

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

Я не прошу, чтобы кто-то решил проблему, но если бы кто-то мог опубликовать некоторый код, который принимает функцию, манипулирует ею и возвращает ее, я был бы признателен за это.

1 Ответ

1 голос
/ 29 августа 2009

Не уверен, что я понимаю вашу домашнюю работу - вы уверены, что просто не хотите звонить f (n) вместо того, чтобы вернуть ее?

Но, некоторые примеры - функция, которая возвращает другую функцию

(* given a number, return a function that takes an int 
   and returns integer + number *)
let adder n = 
    let f x = n+x in
    f

Обратите внимание, что тип, который он возвращает, является функцией:

# adder 10;;
- : int -> int = <fun>
# let g = adder 10;;
val g : int -> int = <fun>
# g 20;;
- : int = 30

По сути, чтобы вернуть функцию, вы определяете функцию и просто возвращаете ее.

Допустим, вы хотите взять функцию и вернуть функцию, которая возвращает двойное значение:

let doubler f = 
    let g x = 2 * (f x) in 
    g

# let f x = x + 1;;
val f : int -> int = <fun>
# let g = doubler f;;
val g : int -> int = <fun>
# g 10;;
- : int = 22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...