Function 以函数作为参数定义函数

Function 以函数作为参数定义函数,function,functional-programming,ocaml,Function,Functional Programming,Ocaml,我目前正在尝试定义一个类型为('a->'a)->'a->'a->'a的函数,它接受一个类型为'a->'a的函数和一个类型为'a'的参数,并对该参数调用函数两次。我对OCaml比较陌生,但我确实知道如何定义函数,但我没有通过反复试验或Google尝试让函数将函数作为参数,然后应用该函数两次 如有任何提示或建议,将不胜感激,提前感谢 编辑:感谢下面的杰弗里,我的问题现在解决了 设f4ga=g(ga);; val f4:('a->'a)->'a->'a=OCaml推断类型,因此如果将参数用作函数,它将

我目前正在尝试定义一个类型为('a->'a)->'a->'a->'a的函数,它接受一个类型为'a->'a的函数和一个类型为'a'的参数,并对该参数调用函数两次。我对OCaml比较陌生,但我确实知道如何定义函数,但我没有通过反复试验或Google尝试让函数将函数作为参数,然后应用该函数两次

如有任何提示或建议,将不胜感激,提前感谢

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

设f4ga=g(ga);;
val f4:('a->'a)->'a->'a=

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

# let f g = g 8 + g 10;;
val f : (int -> int) -> int = <fun>
# (~-);;
- : int -> int = <fun>
# f (~-);;
- : int = -18
#设fg=g8+g10;;
val f:(int->int)->int=
# (~-);;
-:int->int=
#f(~-);;
-:int=-18
要理解该示例,请注意
(~-)
是普通的整数求反运算符


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

这非常接近我的需要,但我需要它真正地将“a”作为一切。在尝试时,应该用('a->'a)->'a->'a#让f4 g a=ga*ga;;我得到valf4:('a->int)->'a->int=这很接近,但不完全('a->'a)->'a->'a->'a有什么建议吗?好的,我不想给你答案!最新尝试的问题是,
*
运算符仅在INT上工作。尝试执行与特定类型无关的操作(例如,制作列表或元组);;val f4:('a->'b)->'a->'b list=再次接近。我怎样才能让一切都成为“a”?(我学习这门语言的方式参差不齐,我对教学风格印象不深,所以我的知识非常渊博)事实上,我想没关系。只要我没有遗漏任何东西#让f4 g a=g(g a);;val f4:('a->'a)->'a->'a=似乎有效?是否要递归求解。对于递归,您需要知道当您完成时要做什么(应用函数0次的简单情况),并且您需要知道如何为一个较小的问题(n-1次)获取答案并获得您想要的答案。我希望这有帮助。你以前的答案大约是20个字符,而这个新的答案大约是60个字符。也就是说,没那么难。