1

我正在尝试使用 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>

但我只是不知道我应该使用什么语法来让它返回一个函数而不是一个布尔值。

我不是要求有人来解决问题,但如果有人可以发布一些代码来接收函数、操作它并返回它,我将不胜感激。

4

1 回答 1

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
于 2009-08-29T08:20:42.103 回答