基础数据类型与变量
基本数据类型
- 整数
Int:有界整数Integer:无界整数
- 浮点数
Float:单精度浮点数Double:双精度浮点数
- 布尔值
Bool:布尔值,True和False
- 字符
Char:单个Unicode字符String:字符串,实际上是[Char]
- 元组:固定大小、可包含不同类型的集合,无法为空
(1, "hello"):包含一个Int和一个String的元组
- 列表:可变长度、可包含相同类型的集合
[1, 2, 3]:包含三个Int的列表
类型声明
Type declaration
也叫类型签名
显式指定表达式的类型
expression :: type
值
Haskell没有“变量”
我们一般用“表达式”来称呼Haskell里的量
Haskell里所有量都是常量,一旦绑定就不能改变
x :: Int -- 类型声明,可以不写,不写就自动推断
x = 5 -- 绑定声明,类似“定义”
内置运算符
-
算术运算
+:加法-:减法*:乘法/:浮点除法div:整数除法mod:模(余数)^:幂(浮点数)^^:有限幂**:幂(对于浮点数)
-
关系运算符
==:等于/=:不等于<: 小于<=:小于或等于>: 大于>=:大于或等于
-
逻辑运算符
&&:逻辑与||:逻辑或not:逻辑非(这实际上是一个函数,不是一个中缀运算符)
-
列表运算符
::构造(添加元素到列表头部)++:连接(连接两个列表)
-
函数运算符
-
$:函数应用(右结合)-
f $ x = f x
-
-
.:函数组合-
(f . g) x = f (g x)
-
-
-
类型运算符
-
:::类型签名-
x :: Int -- 变量的类型声明
f :: Int -> Int -- 函数的类型声明
-
-
!:严格性标志,立即检查某值的类型-
forceEval :: Int -> Int
forceEval !x = x + 1 -- 在进入函数体时就被检查,而非使用x时
-
-
-
其它:
-
!!:列表索引-
[1, 2, 3] !! 1 -- 结果是 2
-
-
@: as-pattern(在模式匹配中使用,不是一个真正的运算符) -
..:范围(用于列表),生成一个范围内的连续列表,可以用于生成整数、字符等的范围-
[1..5] -- 结果为 [1,2,3,4,5]
['a'..'e'] -- 结果为 "abcde"
-- 可以指定步长
[2,4..10] -- 结果为 [2,4,6,8,10]
-
-