基础数据类型与变量
基本数据类型
- 整数
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]
-
-