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

时间:2016-11-02 06:37:38

标签: haskell types syntax arguments type-signature

任何人都可以解释下面的代码,请一步一步地做些什么。我知道它定义了一个函数及其输入,但scanf做了什么,为什么#include<stdio.h> main() { int input,itemno,input2; int name1,price1,name2,price2,name3,price3; printf("enter input:\n"); scanf("%d", &input); if(input==1) { printf("enter number of items:\n"); scanf("%d",&itemno); if(itemno<=3) { printf("enter name and age:\n"); scanf("%d %d\n %d %d\n %d %d\n",&name1,&price1,&name2,&price2,&name3,&price3); } else printf("you can only enter 3 students"); } printf("press 1 to enter again: \n"); scanf("%d",&input2); if(input2==1) { printf("hey"); } } 四<{em>} (+)中有三个Intplus的类型中的s,而Int的代码中似乎只有只有3个参数

plusplus

1 个答案:

答案 0 :(得分:5)

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

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的函数。 / p>

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