我正在尝试使用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>
但我只是不知道我应该使用的语法,以使其返回函数而不是布尔值。
我不是要求有人来解决这个问题,但如果有人可以发布一些代码来接受一个函数,操纵它并返回它,我会很感激。
答案 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