功能类型签名

时间:2016-11-07 04:06:03

标签: ocaml signature

您好!

我试图在互联网上找到这个,但我没有这样做。我想学习OCaml,这对我来说很难理解,如何做到这一点。

我的问题是 - 当我有签名时,如何轻松编写函数。例如 - 我有这样的签名:

((int - > int) - > int - > int - > int) - > (int - > int) - > int - > int - > int

我想写一个函数,上面有这样的签名。有人会帮助我或尝试解释这个吗?我将非常感激:))

1 个答案:

答案 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>
# 

你应该能够解决剩下的问题。我不想通过给出完整的答案来解决问题。