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特性及操作符:
- Range特性
-
[1..10]
[1.0,1.25..2.0]
,通过最初两个元素之间步调的大小,来指明后续元素如何生成 - cycle xs 生成重复的无限长List
- repeat n 生成仅含有n的无限长List
- replicate n xs 生成含有n组xs的List
-
- 索引符
!!
如[1,2,3]!!0==1
- 连接符
++
如[3,1,3] ++ [3,7]
- cons符
:
如1 : [2,3]
,:
的第一个参数必须是单个元素同时第二个必须是一个列表
List Comprehension用法列举
[x*y | x<-[1,2,3] , y<-[1,2,3], x>=2 ,y<=2]
-
[if x
mod2 == 0 then "even" else "odd" | x <- [1..10]]
其中10
mod2
等价于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
修改WC.hs,使得可以计算一个文件中的单词个数;再次修改,计算字符个数。