繁体   English   中英

Haskell代码中的参数数量和类型不同,为什么?

[英]Number of arguments in Haskell code and type is different, why?

任何人都可以解释下面的代码,请逐步执行。 我知道这是定义一个函数,它的输入,但到底是什么(+)做的,为什么有三种不同的Int s中plus Int S IN plusplus的类型,而它好像只有3个参数 plusplus “的代码?

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

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

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

plus = (+)

等效于:

plus a b = a + b

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

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

plus :: Int -> Int -> Int

是一个需要两个Int并返回一个Int的函数。

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

是一个需要三个Int并返回一个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函数始终采用一个参数。 参数类型在->的左侧,返回类型在->的右侧,但是返回类型本身可能是另一个函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM