1. 强类型
2. 静态类型
3. 可自动推断
额,我按照自己的理解解释一下吧...
强类型不支持自动类型转换,为了让代码可靠一些...
静态类型是每个表达式或者变量的类型都是静态不变的...
Haskell可以自动检测表达式中常数的数据类型...
common basic types
char: Unicode字符
bool:True & False
Int : 在32位机器上是32位,在64位机器上是64位
Integer: 高精度整形
Double:64位浮点型
Function Application
一些函数需要注意的地方,就是如果你要把一个函数的值传到另一个函数里,需要加一个括号以改变优先级
1 ghci>odd 3
2 True
3 ghci>even 6
4 True
5 ghci>compare (sqrt 2) 1
6 GT
7 ghci>compare (sqrt 2) 1 == GT
8 True
9 ghci>compare sqrt 2 1 == GT
10
11 <interactive>:16:1:
12 The function `compare' is applied to three arguments,
13 but its type `a0 -> a0 -> Ordering' has only two
14 In the first argument of `(==)', namely `compare sqrt 2 1'
15 In the expression: compare sqrt 2 1 == GT
16 In an equation for `it': it = compare sqrt 2 1 == GT
Composite Data Types: Lists and Tuples
字符串就是一个字符列表,head 函数可以返回列表的第一个元素,tail可以返回列表的除了第一个元素的所有元素。
1 ghci>head "figo"
2 'f'
3 ghci>tail "figo"
4 "igo"
5 ghci>tail [1,2,3]
6 [2,3]
还有另一种类型叫做“元组”。类似于C++的pair,连用法都极其相似。
ghci>snd (19910905,"hanfei")
"hanfei"
ghci>fst (19910905,"hanfei")
19910905
Function Types and Purity
:type 命令可以查看一个函数传入的参数类型和返回的参数类型
Haskell的函数只允许调用传入的参数,禁止使用全局变量。 这样的函数叫做“纯函数”。(略感坑爹)
1 ghci>:type lines
2 lines :: String -> [String]
3 ghci>lines "figo\nis\nstupid\nhahaha"
4 ["figo","is","stupid","hahaha"]
Haskell Soucre Files, and Writing Simple Functions
Haskell源文件的后缀是.hs,这样的话vim就会有语法高亮了...
定义一个函数
1 -- add.hs by figo 05.16.2012
2 add a b = a + b
我们可以用:load add.hs来加载这个函数
1 ghci>:load add.hs
2 [1 of 1] Compiling Main ( add.hs, interpreted )
3 Ok, modules loaded: Main.
4 ghci>:type add
5 add :: Num a => a -> a -> a
6 ghci>add 1 2
7 3
Conditional Evaluation
利用if来写一个drop函数:
1 -- myDrop.hs by figo 05.16.2012
2 myDrop n xs = if n <= 0 || null xs
3 then xs
4 else myDrop (n-1)(tail xs)
里面的类型都是自动检测的... 额... 不用像C++那样提前声明
测试一下刚写的东东
1 ghci>:load myDrop.hs
2 [1 of 1] Compiling Main ( myDrop.hs, interpreted )
3 Ok, modules loaded: Main.
4 ghci>myDrop 2 "figo"
5 "go"
6 ghci>myDrop 1 ["hanfei","figo","hello"]
7 ["figo","hello"]
Polymorphism in Haskell
Haskell的多态性指的是,如果一个函数可以把某参数当做任意类型处理。就像C++的template一样。
ghci>:type fst
fst :: (a, b) -> a
Exercises
写一个函数,功能是返回元素的倒数第二个值。
呃... 只能写成这样子了... 好渣... 求大神指点
1 -- lastButOne.hs by figo 05.16.2012
2 lastButOne xs = if(length (xs) <= 2)
3 then head xs
4 else lastButOne (tail xs)
5
posted on 2012-05-16 19:59
西月弦 阅读(1621)
评论(3) 编辑 收藏 引用 所属分类:
读书笔记(Haskell)