vlambda博客
学习文章列表

笔记/Haskell语法/入门

ghci的一些命令

  • 设置提示符 :set prompt "ghci>"
  • 设置是否后缀类型显示 :set +t :unset +t
  • 显示类型 :type 简写 :t
  • 载入文件 :load 简写 :l
  • 预先加载module :module + Data.Ratio
  • 查看操作符优先级 :info (+) (infixl 6 + 指 左结合 优先级为6;infixr 指 右结合)
  • 获取帮助信息 :?
  • 单行注释 --
  • 多行注释 {- -}

运算符

  • 不等于 /=
  • 取余 mod
  • 逻辑与 &&
  • 逻辑或 ||
  • 逻辑非 not
  • 整数乘方操作符 ^
  • 浮点数乘方操作符 **
  • let构造 定义临时变量 let e = 1

列表

[]::[a]一个列表由方括号以及被逗号分隔的元素组成,所有元素必须是相同类型。

字符串[Char]实际是字符Char列表,存在"string"==['s','t','r','i','n','g']""==[]

列表Range特性及操作符:

  1. Range特性
    • [1..10] [1.0,1.25..2.0],通过最初两个元素之间步调的大小,来指明后续元素如何生成
    • cycle xs 生成重复的无限长List
    • repeat n 生成仅含有n的无限长List
    • replicate n xs 生成含有n组xs的List
  2. 索引符 !!   如 [1,2,3]!!0==1
  3. 连接符 ++[3,1,3] ++ [3,7]
  4. cons符 :1 : [2,3]:的第一个参数必须是单个元素同时第二个必须是一个列表

List Comprehension用法列举

  • [x*y | x<-[1,2,3] , y<-[1,2,3], x>=2 ,y<=2]
  • [if x mod 2 == 0 then "even" else "odd" | x <- [1..10]] 其中 10 mod 2等价于 mod 10 2
  • mylength xs = sum [1 | _ <- xs]

一些常用的类型簇(Typeclass)

类型簇可以看作满足一系列特性的类的集合,使用class关键字创建Typeclass,在类型签名时只可将类型簇用作约束类型,不能用作具体类型。

  • Bounded 有界性
  • Eq      相等性
  • Ord    可比性 返回LT、GT、EQ等
  • Show 显示性 show函数可以取任意Show类型转换为字符串
  • Read 可读性 read函数读取字符串转换为Read类型相应成员类
  • Num 数值类型
  • Fractional 分数类型
  • Integral 整数类型 包括Int、Integer
  • Floating 浮点类型 包括Float、Double
  • Enum 可枚举性 使用succ、pred等函数可取得前驱或后继值

练习

  • succ 6==7
  • pred 7==6
  • truncate pi==3
  • round 3.5==4 round 3.4==3
  • floor 3.7==3
  • ceiling 3.3==4
  • 见下方代码块
Prelude> let x=1
Prelude> :show bindings
it :: Bool = True
x :: Num p => p = _
  • 见下方代码块
--comments WC.hs
main = interact wordCount
where wordCount input =show(length(lines input))++"\n"

两种运行程序方法

  • 直接运行程序 runhaskell(or runghc) WC.hs < quux.txt若无 <quux.txt文件输入,可在命令行中直接输入,如
cmd> runhaskell WC.hs
--line1
--line2
2
  • 先编译 ghc WC.hs生成WC.exe后 WC.exe < quux.txt