1. 強(qiáng)類型
2. 靜態(tài)類型
3. 可自動(dòng)推斷
額,我按照自己的理解解釋一下吧...
強(qiáng)類型不支持自動(dòng)類型轉(zhuǎn)換,為了讓代碼可靠一些...
靜態(tài)類型是每個(gè)表達(dá)式或者變量的類型都是靜態(tài)不變的...
Haskell可以自動(dòng)檢測(cè)表達(dá)式中常數(shù)的數(shù)據(jù)類型...
common basic types
char: Unicode字符
bool:True & False
Int : 在32位機(jī)器上是32位,在64位機(jī)器上是64位
Integer: 高精度整形
Double:64位浮點(diǎn)型
Function Application
一些函數(shù)需要注意的地方,就是如果你要把一個(gè)函數(shù)的值傳到另一個(gè)函數(shù)里,需要加一個(gè)括號(hào)以改變優(yōu)先級(jí)
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
字符串就是一個(gè)字符列表,head 函數(shù)可以返回列表的第一個(gè)元素,tail可以返回列表的除了第一個(gè)元素的所有元素。
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 命令可以查看一個(gè)函數(shù)傳入的參數(shù)類型和返回的參數(shù)類型
Haskell的函數(shù)只允許調(diào)用傳入的參數(shù),禁止使用全局變量。 這樣的函數(shù)叫做“純函數(shù)”。(略感坑爹)
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就會(huì)有語(yǔ)法高亮了...
定義一個(gè)函數(shù)
1 -- add.hs by figo 05.16.2012
2 add a b = a + b
我們可以用:load add.hs來(lái)加載這個(gè)函數(shù)
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來(lái)寫一個(gè)drop函數(shù):
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)
里面的類型都是自動(dòng)檢測(cè)的... 額... 不用像C++那樣提前聲明
測(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的多態(tài)性指的是,如果一個(gè)函數(shù)可以把某參數(shù)當(dāng)做任意類型處理。就像C++的template一樣。
ghci>:type fst
fst :: (a, b) -> a
Exercises
寫一個(gè)函數(shù),功能是返回元素的倒數(shù)第二個(gè)值。
呃... 只能寫成這樣子了... 好渣... 求大神指點(diǎn)
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
西月弦 閱讀(1641)
評(píng)論(3) 編輯 收藏 引用 所屬分類:
讀書筆記(Haskell)