Haskell学习(2)–类型和函数

1. 在Haskell中,所有的表达式和函数都拥有类型,和其他常见的语言一样,类型代表了它所拥有的特性。Haskelld类型归纳起来,可以用三点表示:强类型,静态类型和自动引用。

1) 强类型(Strong types):所谓强类型,是指类型系统保证了程序不会出现特定的类型匹配错误。对于符合语言类型规定的程序我们称之为Well Typed,反之Ill Typed。比如对于一个需要参数为Integer的函数,赋值String即不满足强类型的要求,系统在编译期间将会直接检测出来反馈给用户。
在另一个方面,强类型下系统不支持任何的自动类型转换。比如在C或者JAVA中,有int和double类型的自动转换,但是在Haskell中是不允许的。
强类型给程序会带来一些不方便,但是更多的是他保证了程序在运行之前的完全正确。

2)静态类型(Static types):静态类型是指编译器在编译期间即知道了所有的值和表达式的类型,并确保其正确才运行程序。

3)类型引用(Type inference):指的是Haskell编译器可以自动的推断出大部分表达式的类型而不需要用户主动的去定义。

Haskell的强类型和静态类型确保了其程序不会在运行时发生类型错误,但这也要求了我们在编码的时候需要做更多的前序准备工作。而类型引用则使得整个程序精炼。

 

2. 一些常见的类型:

char, Bool, Int, Integer, Double

其中Int和Integer的区别在于,Int是长度固定的而Integer可以表示任意大小的数目在系统的允许之下。

 

3. List和Tuple

区别在于:List用[]表示,它的元素类型是一致的,但是长度是可以变化的;Tuple用()表示,它的元素类型可以是不一样的,但是长度是固定的。同时一般来说,Tuple的元素数量至少是2,称为pair。

对于List和Tuple的一些函数操作包括:

take 2 [1,2,3,4,5] 得到[1,2]    drop 3 [1,2,3,4,5] 得到 [4,5]
fst(1,’a')得到1     snd(1,’a')得到’a'    fst和snd函数只能用于pair。

 

4. 函数

Haskell的函数类型使用->隔开的,比如:type lines得到的是lines::String->[String]

另外在Haskell中,一旦一个变量被赋予了一个值,是不能去改变这个值的,也就是说同一个变量不能赋值多次。

用If..then…else表示条件语句,需要注意的是else部分必须存在而不能去掉。

Haskell 采用的是Lazy evaluation,也就是说直到需要得到这个值的运算的时候才会去进行计算。比如isOdd n = mod n 2 == 1,在计算isOdd(1+2)的时候,首先不是计算的1+2,而是直接把1+2作为一个整体带入到计算式中,直到必须执行1+2计算的时候才算。

 

5. Haskell的多态

在 List的last函数中,并没有对函数的参数类型进行规定,也就是说last[1,2,3,4,5]返回的是5,而last “baz”返回的是’z',具体返回的值因参数的类型而定。用:type last查看函数类型,发现是last::[a]->a,其中a是一个类型变量,可以用任何类型来代替,有点类似于Java中的泛型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值