-
终端输入<code>ghci</code>开始魔幻之旅。
-
为了美观起见,更改指令显示 <code>:set prompt "ghci> "</code> 把它改成 ghci>
-
第一个外部文件:
先新建文件baby.hs,然后在里面输入我们的函数:
doubleMe x = x + x
然后用命令<code>:l baby.hs</code> 进行加载,加载完成后会有提示。
然后我们再输入以下代码测试。
doubleMe 5
发现返回为10(即之前定义函数的返回值)。
- if/then/else
haskell的条件判断与其他语言稍有不同,由于设计原因,所有的东西都应该有返回,所以我们不能省略then和else。具体结构如下
if 条件 then 满足if的表达式 else 不满足的if的表达式
test x = if x>100 then x else x*2
- list
list数据结构用来存储多个类型相同的元素
ghci下 可以用let 声明常量
let x=[1,2,3]
let y=[1,2,3]
x++y // [1,2,3,1,2,3]
利用<code>:</code>可以实现对list的插入
5:[1,2,3] //[5,1,2,3]
[1,2,3]:5 //error
使用 <code>!!</code> 运算符,按照索引取得 List 中的元素
[1,2,3]!!2 //3
last的head/last/tail/init等操作
ghci>head [1,2,3]
1
ghci>last [1,2,3]
3
ghci>tail [1,2,3]
[2,3]
ghci>init [1,2,3]
[1,2]
ghci>length [1,2,3]
3
ghci>null [1,2,3]
False
ghci>null []
True
ghci>reverse [1,2,3]
[3,2,1]
ghci>take 0 [1,2,3]
[]
ghci>take 1 [1,2,3]
[1]
ghci>take 2 [1,2,3]
[1,2]
ghci>take 5 [1,2,3]
[1,2,3]
ghci>maximum [1,2,3]
3
ghci>minimum [1,2,3]
1
ghci>sum [1,2,3]
6
ghci>1 `elem` [1,2,3]
True
ghci>0 `elem` [1,2,3]
False
关于list结构如下:
list结构
6.range
ghci>[1..5]
[1,2,3,4,5]
ghci>[2,4..5]
[2,4]
ghci>[10,20..50]
[10,20,30,40,50]
ghci>[3,6..12]
[3,6,9,12]
7.<code>:t xxx</code>来做类型判断
ghci>:t "a"
"a" :: [Char]
ghci>:t 1
1 :: Num t => t
ghci>:t doubleMe
doubleMe :: Num a => a -> a
8.数据类型
Int 表示整数。对 32 位的机器而言,上限一般是 2147483647,下限是 -2147483648。
Integer 表示整数,但它是无界的
Float 表示单精度的浮点数。
Double 表示双精度的浮点数。
Bool 表示布尔值,它只有两种值:True 和 False。
Char 表示一个字符。一个字符由单引号括起,一组字符的 List 即为字符串。
Tuple 的类型取决于它的长度及其中项的类型。注意,空 Tuple 同样也是个类型,它只有一种值:()。
9.杂记
函数优先级 > 乘法优先级
函数复合(顺序从右到左) 比如:A->B->C 表示 A->(B->C)
兰姆达表达式:
\n => 2*n+1
Prelude> map (\n->2*n+1) [1..5]
[3,5,7,9,11]
== 表示相等
/= 表示不相等
输出使用putStrLn
Prelude> putStrLn("11111"++"\n"++"22222"++"\n"++"3333333")
11111
22222
3333333