Haskell学习笔记(一)

亮点:Haskell迅速接近前20

这一系列的笔记主要参考中文版的 澳门新葡亰,Real World
Haskell,这篇博文作为本系列的第一篇,先介绍一下Haskell的语法和一些基本知识。

上个月我们问道哪种语言将会成为下一个新的热门语言?我们提出了Scala,Erlang和Clojure。很明显,新语言来自函数式编程领域。一
种面向过程的语言,Haskell没有被明显得提及。这个月它从35名上升到25名。从Tiobe趋势图来看,从2006年到2010年,再到2012
年,它再不断的上升,看起来很有前景。obj-c上升势头依然很猛。


1–20名:

进入/退出交互模式ghci

安装好Haskell,命令行敲ghci进入交互模式

Prelude> :set prompt “ghci>”
ghci>:q                       -- 退出

澳门新葡亰 1

基本算术

ghci> 1 + 1
2

ghci> (+) 1 1
2

ghci> 2 + (-1)     -- 负数是通过唯一的一元操作符'-'得到,-1的括号不能省略
1

ghci> True && False
False

ghci> True || False
True

ghci> :info (+)      -- 操作符的信息可以通过':info'方式查看
class Num a where
  (+) :: a -> a -> a
  ...
    -- Defined in ‘GHC.Num’
infixl 6 +           -- infixl代表加法是左结合的,优先级为6

ghci> :info (^)
(^) :: (Num a, Integral b) => a -> b -> a   -- Defined in ‘GHC.Real’
infixr 8 ^        -- 乘方是右结合的,指数b的类型是Integer,优先级为8

ghci> not True    -- not是一个内置函数,不可以通过:info查看其信息
False

ghci> 1 == 1
True

ghci> 1 /= 1
False

ghci> let e = exp 1     -- 添加绑定
ghci> e ^ 1
2.718281828459045
ghci> e ** pi      -- 指数不是整数时,需要更换操作符
23.140692632779263

21--50名:

列表和元组

列表表示一系列相同类型的元素集合,元组则可以包括不同类型的元素,void在Haskell中被实现为一个空的元组

ghci> [1,2]    -- 列表
[1,2]

ghci> [1..5]
[1,2,3,4,5]

ghci> [1,3..9]
[1,3,5,7,9]

ghci> [1] ++ [2,3]  -- 列表的连接
[1,2,3]

ghci> 1 : [2,3]  -- 元素和列表的连接,类似cons
[1,2,3]

ghci> head [1,2,3]   -- 返回列表的第一个元素
1

ghci> tail [1,2,3]   -- 返回除去第一个元素后的剩余列表
[2,3]

ghci> last [1,2,3]   -- 返回列表的最后一个元素
[3]

ghci> init [1,2,3]   -- 返回除去最后一个元素的剩余列表
[1,2]

ghci> reverse [1,2,3]
[3,2,1]

ghci> take 2 [1,2,3]  -- 返回列表的前n个元素组成的新列表
[1,2]

ghci> drop 1 [1,2,3]  -- 返回丢弃前n个元素后得到的新列表
[2,3]

ghci> null []
True

ghci> (1, "Hello")    -- 元组
(1, "Hello")

ghci> fst (1,"Hello")  -- 取元组的第一个元素
1

ghci> snd (1,"Hello")  -- 取元组的第二个元素
"Hello" 

澳门新葡亰 2

字符串

Haskell的字符串和C的非常相似,用单引号表示单个字符,双引号代表字符串,字符串实际就是单个字符的列表,但不需要像C中用’’结尾

ghci> 'a'
'a'

ghci> "Hello World"
"Hello World"

ghci> ['H','e','l','l','o']
"Hello"

ghci> "" == []
True

ghci> 'a' : "bc"
"abc"

ghci> "a" ++ "bc"
"abc"

 

查看表达式类型

在交互式界面下,我们有两种方法查看表达式的类型:

ghci> :set +t
ghci > 'a'
'a'
it :: Char    -- it是交互模式下存储运算结果的变量
ghci> :unset +t
ghci> 'a'
'a'

ghci> :type 'a'
'a' :: Char
ghci> :type 1 + 1
1 + 1 :: Num a => a    -- :type执行静态的类型推导,并不会显示运算结果2的类型

本文转载自:

分数

ghci> :m +Data.Ratio      -- ':m'代表载入模块
ghci> :set +t
ghci> 1 % 2               -- 分数1/2
1 % 2
it :: Integral a => Ratio a
网站地图xml地图