2013-03-07 104 views
0

我目前正试图定义一个类型为'a - >'a) - >'a - >'的函数,它需要一个类型为'a - >'的函数和一个类型为“a”的参数,并在该参数上调用该函数两次。我对OCaml比较陌生,但我确实知道如何定义一个函数,但是我没有尝试过使用试错法,或者Google试图让一个函数作为参数,然后再使用这个函数两次。定义一个函数作为参数

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

编辑:感谢Jeffrey下面,我的问题现在已解决。

let f4 g a = g(g a);;

VAL F4:( 'A - >' 一) - > 'A - >' 一个=

回答

1

OCaml的推断类型,因此,如果您使用的参数作为一个函数,它推断出它的功能。这里有一个例子:

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

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

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

+0

这与我所需要的非常接近,但我需要它从字面上采取'a的一切。 它应该与('a - >'a) - >'a - >' 当试着#let f4 g a = g a * g a ;;我得到 VAL F4:( 'A - > INT) - > 'A - > INT = 这是接近,但不完全(' A - >' 一) - > 'A - >' 一个 任何建议? – Bizzle 2013-03-08 00:18:27

+0

对,我不想只给你答案!这个最新尝试的问题是'*'运算符只能用于ints。尝试做一个没有绑定到特定类型的操作(比如说做一个列表或元组)。 – 2013-03-08 00:20:26

+0

#let f4 g a = g a :: g a :: [] ;; val f4:('a - >'b) - >'a - >'b list = again我很接近。我将如何让所有事情成为'一个? (我学习这门语言的方式很差劲,我对教学风格并没有留下深刻的印象,所以我的知识非常好) – Bizzle 2013-03-08 00:23:25

相关问题