gpt4 book ai didi

haskell - 输入 FP : Tuple Arguments and Curriable Arguments

转载 作者:行者123 更新时间:2023-12-02 17:03:02 31 4
gpt4 key购买 nike

在静态类型函数编程语言(例如 Standard ML、F#、OCaml 和 Haskell)中,编写函数时通常将参数彼此分开,并通过空格与函数名称分开:

let add a b =
a + b

这里的类型是“int -> (int -> int)”,即一个函数接受一个 int 并返回一个函数,该函数依次接受和 int 并最终返回一个 int。因此柯里化(Currying)成为可能。

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

let add(a, b) =
a + b

在这种情况下,类型变为“(int * int) -> int”。

从语言设计的角度来看,是否有什么理由不能简单地识别类型代数中的这两种类型模式?换句话说,“(a * b) -> c”减少为“a -> (b -> c)”,允许同样轻松地柯里化(Currying)这两个变体。

我认为当设计我提到的四种语言时,一定会出现这个问题。那么有人知道为什么这四种语言选择不“统一”这两种类型模式的任何原因或研究吗?

最佳答案

我认为今天的共识是通过柯里化(Currying)(a -> b -> c 形式)来处理多个参数,并在您真正想要值时保留元组元组类型(在列表等中)。自标准 ML 以来的所有静态类型函数语言都遵守这一共识,标准 ML(纯粹作为惯例)对采用多个参数的函数使用元组。

为什么会这样呢?标准机器学习是这些语言中最古老的,当人们第一次编写机器学习编译器时,并不知道如何有效地处理柯里化(Currying)参数。 (问题的根源在于,任何柯里化(Currying)函数都可能被您尚未见过的其他代码部分应用,并且您必须使用以下命令来编译它考虑到这种可能性。)自从设计了标准 ML 以来,编译器已经得到了改进,您可以在 excellent paper by Simon Marlow and Simon Peyton Jones 中阅读有关最新技术的信息。 .

LISP 是所有语言中最古老的函数式语言,它的具体语法对柯里化(Currying)和部分应用极其不友好。哼。

关于haskell - 输入 FP : Tuple Arguments and Curriable Arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/405761/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com