当前位置:  开发笔记 > 编程语言 > 正文

输入的FP:元组参数和可引用的参数

如何解决《输入的FP:元组参数和可引用的参数》经验,为你挑选了1个好方法。

在静态类型的函数式编程语言中,如标准ML,F#,OCaml和Haskell,函数通常用参数相互分离,并且只用空格从函数名中编写:

let add a b =
    a + b

这里的类型是" int -> (int -> int)",即一个接受int的函数,返回一个转到的函数和int,最后返回一个int.因此,成为可能.

也可以定义一个以元组作为参数的类似函数:

let add(a, b) =
    a + b

(int * int) -> int在这种情况下,类型变为" ".

从语言设计的角度来看,有没有理由不能简单地在类型代数中识别这两种类型模式?换句话说,使"(a*b) - > c"减少到"a - >(b - > c)",允许两种变体同样容易地变成曲线.

我认为当我提到的四种语言被设计出来时,这个问题肯定会出现.那么有谁知道任何理由或研究表明为什么所有这四种语言都选择不"统一"这两种类型模式?



1> Norman Ramse..:

我认为今天的共识是通过currying(形式)来处理多个参数,a -> b -> c并在你真正想要元组类型的值时(在列表等中)保留元组.自标准ML以来,每个静态类型的函数语言都遵循这种共识,(纯粹作为惯例)将元组用于带有多个参数的函数.

为什么会这样?标准ML是这些语言中最古老的,当人们第一次编写ML编译器时,不知道如何有效地处理curried参数.(问题的根源在于,任何 curry函数可以部分应用于您尚未看到的其他代码,并且您必须考虑到这种可能性进行编译.)自设计标准ML以来,编译器具有改进了,您可以在Simon Marlow和Simon Peyton Jones的优秀论文中了解最新技术.

LISP是它们中最古老的函数式语言,它具有一种具体的语法,对于currying和部分应用程序非常不友好.Hrmph.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有