使用OCaml实现以下功能

时间:2009-08-29 07:39:15

标签: ocaml

我正在尝试使用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 个答案:

答案 0 :(得分:1)

不确定我理解你的作业 - 你确定你只是不想打电话给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