首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(int -> int) -> (int -> int)是什么意思?

(int -> int) -> (int -> int)是什么意思?
EN

Stack Overflow用户
提问于 2017-10-13 08:15:50
回答 2查看 1.6K关注 0票数 0

我正在OCaml做一个学校作业,我有一个关于表达式的含义的问题。

例如,在定义函数时,如果我写道:

代码语言:javascript
复制
let iter : int * (int -> int) -> (int -> int)
= fun (n,f) ->

(int -> int)是什么意思?我理解函数本身接收一对作为参数,但我不完全理解括号的含义.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-13 10:16:35

括号用于消除(int -> int)类型的函数之间的歧义--这意味着它接受一个int类型的参数并返回一个int --并且可能只有两个常规的int作为该函数的参数。例如,如果没有第一对括号,您的iter将期望一个(int, int)元组,如果没有其他参数,则将int -> int -> int作为返回类型。

请注意,第二对括号并不是绝对必要的,但它可以很好地指示您期望得到一个函数作为回报。如果没有这对括号,函数就可以读取为(int, int -> int)的一个元组加上另一个int,例如返回一个int

一个与您的iter具有相同签名的函数的示例可以是:

代码语言:javascript
复制
let random_func: int * (int -> int) -> (int -> int) =
     fun (n, f) -> f
票数 4
EN

Stack Overflow用户

发布于 2017-10-13 23:32:50

在下面找到TL;DR。

在lambda微积分(请容忍我的话)中,这是ML语言的基础,其核心思想是抽象应用程序或将函数映射到一个参数。只有一个论点,

代码语言:javascript
复制
λx[x + 1]

上面的λ将抽象函数x + 1读入等待x__值的应用程序中,防止其更改,并应用(用值替换函数中的x并计算)。

在Ocaml中的上述内容相当于:

代码语言:javascript
复制
fun x -> x + 1

它的类型为int -> int,或输入类型为int,输出类型为int。现在,lambda一次只处理一个论点。如何处理带有多个参数的函数,如x*x -2*x + c (多项式函数x2 − 2·x + c)?和以前一样,它每次只对参数进行一次评估。

代码语言:javascript
复制
λc[λx[x*x - 2*x + c]]

因此,前一个应用程序的输出将成为下一个应用程序的输入,依此类推。Ocaml的等价物

代码语言:javascript
复制
fun c x -> (x * x) - (2 * x) + c

该函数的类型为int -> int -> int(int -> int) -> int (输入->输出链),如果将该函数部分应用于参数x = 3,则得到如下简化的函数:

代码语言:javascript
复制
fun c 3 -> (3 * 3) - (2 * 3) + c 
fun c -> 9 - 6 + c
fun c -> 3 + c

结果函数的类型为int -> int。这是赛跑的基础。一开始它可能看起来很混乱,但在命令式语言中,它被证明是非常有用和被低估的。例如,您可以这样做:

代码语言:javascript
复制
let waiting_for_c_and_x = fun c x -> 2*x + c
let waiting_for_c = waiting_for_c_and_x 10 in
  let result = waiting_for_c 2  (* result = 22 *)

TL;博士

但是,使用括号对这些输入/输出链进行分组是很棘手的,但在Ocaml中是必要的,因为实际上编译器无法从例如int * int -> int中猜测,如果您指的是接受int * int对作为输入并将int作为输出返回(我们可以将其作为(int * int) -> int括号)的应用程序,或者接受作为参数的对int和类型为int -> int的函数的应用程序(可以将其写入为int * (int -> int))。

斯坦福哲学百科全书(读得很好)应用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46725458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档