笔记/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特性及操作符:
-
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 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