0

我目前正在尝试定义一个 ('a -> 'a) -> 'a -> 'a 类型的函数,它接受一个 'a -> 'a 类型的函数和一个 'a 类型的参数并调用该函数两次关于论点。我对 OCaml 比较陌生,但我确实知道如何定义一个函数,但我没有运气尝试和错误,或者谷歌试图让一个函数将一个函数作为参数然后应用该函数两次。

任何提示或指示将不胜感激,在此先感谢。

编辑:感谢下面的杰弗里,我的问题现在解决了。

让 f4 ga = g (ga );;

val f4 : ('a -> 'a) -> 'a -> 'a =

4

1 回答 1

1

OCaml 推断类型,因此如果您将参数用作函数,它会推断它是一个函数。这是一个例子:

# let f g = g 8 + g 10;;
val f : (int -> int) -> int = <fun>
# (~-);;
- : int -> int = <fun>
# f (~-);;
- : int = -18

要理解该示例,请注意这(~-)是普通的整数否定运算符。

更新:提示您更复杂的问题。您需要测试的值n。也许一个if声明会起作用?第二个提示:如果使用递归,则不需要使用循环。如果要使用循环,请不要使用递归。(我个人建议使用递归,就像在学习钢琴时弹奏音阶一样。)

于 2013-03-07T23:56:17.043 回答