跳到主要内容

基础数据类型与变量

基本数据类型

  • 整数
    • Int:有界整数
    • Integer:无界整数
  • 浮点数
    • Float:单精度浮点数
    • Double:双精度浮点数
  • 布尔值
    • Bool:布尔值,TrueFalse
  • 字符
    • 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]