【问题标题】:Number of arguments in Haskell code and type is different, why?Haskell 代码中的参数数量和类型不同,为什么?
【发布时间】:2016-11-02 06:37:37
【问题描述】:

任何人都可以解释下面的代码,请逐步解释它的作用。我知道它正在定义一个函数及其输入,但是(+) 是做什么的,为什么plus 中有三个Ints 和plusplus 中有四个 Ints' s 类型,而 plusplus 的代码中似乎只有 3 个参数

 plus :: Int -> Int -> Int 
 plus = (+)

 plusPlus :: Int -> Int -> Int -> Int
 plusPlus a b c = a + b + c

【问题讨论】:

    标签: haskell types syntax arguments type-signature


    【解决方案1】:

    + 是加法运算符。将运算符放在括号中,例如(+),指的是加法函数本身,而不是使用+ 将两个数字直接相加。基本上是这样的:

    plus = (+)
    

    相当于:

    plus a b = a + b
    

    无论哪种方式,它都将plus 定义为+ 的同义词。

    在 Haskell 中,-> 用于分隔参数的类型,以及返回值。所以,

    plus :: Int -> Int -> Int
    

    是一个函数,它接受两个Ints 并返回一个Int

    plusPlus :: Int -> Int -> Int -> Int
    

    是一个函数,它接受三个Ints 并返回一个Int

    参数和返回值语法相同的原因是currying

    要真正的迂腐,

    plus :: Int -> Int -> Int                -- ~  Int -> (Int -> Int)
    

    是一个接受Int的函数,并返回一个接受Int并返回Int的函数。

    plusPlus :: Int -> Int -> Int -> Int     -- ~  Int -> (Int -> (Int -> Int))
    

    是一个接受Int的函数,并返回一个接受Int的函数,并返回一个接受Int并返回Int的函数。

    在实践中,将 Haskell 函数称为接受多个参数是很方便的。但从技术上讲,Haskell 函数总是采用一个参数。参数类型在->的左侧,返回类型在->的右侧,但返回类型本身可能是另一个函数。

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 2014-04-30
      • 2021-12-31
      • 2012-02-12
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      相关资源
      最近更新 更多