您好!
我试图在互联网上找到这个,但我没有这样做。我想学习OCaml,这对我来说很难理解,如何做到这一点。
我的问题是 - 当我有签名时,如何轻松编写函数。例如 - 我有这样的签名:
((int - > int) - > int - > int - > int) - > (int - > int) - > int - > int - > int
我想写一个函数,上面有这样的签名。有人会帮助我或尝试解释这个吗?我将非常感激:))
答案 0 :(得分:4)
类型为'a -> 'b
的函数采用某种类型'a
的值,并返回某种类型'b
的值。要使用特定类型,类型int -> int
的函数将获取int并返回int。例如,这是整数否定的类型。
查看类型为'a -> 'b -> 'c
的函数的一种方法是,它需要两个值'a
和'b
的值,并返回类型为'c
的值。一个具体的例子是类型int -> int -> int
,它是整数加法的类型(比如说):
# (+);;
- : int -> int -> int = <fun>
这种模式继续存在更多争论。
您提供的类型具有此类型的高级别:'a -> 'b -> 'c -> 'd -> 'e
。所以,它是一个有四个参数的函数。
第一个参数的类型为(int -> int) -> int -> int -> int
,这本身就非常复杂。第二个参数的类型为int -> int
,如上所述。第三个和第四个参数的类型为int
。该函数返回int
。
对第一个参数使用相同的分析,你可以看到它是一个带有三个参数的函数。第一个是int -> int
类型的函数,第二个和第三个类型是int
。此函数返回int
。
这是(int -> int) -> int -> int -> int
类型的函数:
let myfun f a b =
(f a) + a + b
您可以在OCaml toplevel中看到类型:
# let myfun f a b =
(f a) + a + b;;
val myfun : (int -> int) -> int -> int -> int = <fun>
#
你应该能够解决剩下的问题。我不想通过给出完整的答案来解决问题。