以下內容引用自haskell官網:
haskell是乙個先進的,純粹的函式式程式語言。乙個典型的宣告式地,靜態型別的**如下:
haskell 有如下的特性: 在終端輸入ghci進行入互動模式。如下是一些基本的運算,幾乎不用解釋就可以看懂。primes = filterprime [2..]
where filterprime (p:xs) =
p : filterprime [x | x <- xs, x `mod` p /= 0]
3.2.1 haskell 常用內建函式prelude> 2+15
17prelude> 45*90
4050
prelude> 568-23
545prelude> 3/2
1.5prelude> (90-23)*8
536prelude> 50*(100-9028)
-446400
prelude> true && false
false
prelude> true && true
true
prelude> false || true
true
prelude> not false
true
prelude> not (true && true)
false
prelude> 5 == 4
false
prelude> 5 == 5
true
prelude> "hello" == "hello"
true
prelude> 5 /= 4
true
prelude> 5 /= 5
false
注意haskell中函式的呼叫引數是使用空格的,這一點和傳統的編譯型語言有很大的不同。prelude> succ 10
11
prelude> pred 10
9
如果要比較多個數字的最小值,直接傳遞多個數字作為引數會報錯,比如:prelude> min 10 3.4
3.4
我們可以通過多次呼叫min函式(注意需要加括號)來解決:prelude> min 1 19 23
:21:1:
non type-variable argument in the constraint: num (a -> t)
(use flexiblecontexts to permit this)
when checking that 『it』 has the inferred type
it :: forall a t. (num a, num (a -> t), ord (a -> t)) => t
prelude> min 1 (min 9 23)
1
prelude> max 9.9 9.0
9.9
注意prelude> succ 10 + max 10 20 * 3
71prelude> (succ 10) +(max 10 20)*3
71
succ 9*10
的值是100而不是91,這是因為計算的順序是先計算succ 9
得到10,然後再計算10*10=100
,如果我們要計算9*10的後繼,需要寫成succ (9*10)
的形式。
需要注意的是,div函式接收的兩個引數必須是整數,第乙個是被除數,第二個是除數,如果除不盡則返回商,捨棄餘數。傳入數字不能是浮點數,比如下面的形式會報錯:prelude> div 10 3
3prelude> div 10 5
2
3.2.2 構建自己的函式prelude> div 1.2 3
:31:1:
no instance for (fractional a0) arising from a use of 『it』
the type variable 『a0』 is ambiguous
note: there are several potential instances:
instance integral a => fractional (ghc.real.ratio a)
-- defined in 『ghc.real』
instance fractional double -- defined in 『ghc.float』
instance fractional float -- defined in 『ghc.float』
in the first argument of 『print』, namely 『it』
in a stmt of an interactive ghci command: print it
doubleme x = x + x -- 將數字變為兩倍
這個函式非常簡單,就是返回乙個數字的兩倍。注意上面函式的定義方式:首先是函式名字,然後是空格分隔的引數,接著是等於號,等於號後面的是函式的實現。要執行這個函式,需要把它寫在乙個檔案裡,比如add.hs,然後輸入ghci進入命令列模式,輸入:l add.hs
就可以載入函式了。下面是它的呼叫計算結果:
prelude> :l add.hs
[1 of 1] compiling main ( add.hs, interpreted )
ok, modules loaded: main.
*main> doubleme 2
4*main> doubleme 3
6
doubleus x y = x*2 + y*2 -- 兩個數字變為兩倍然後相加
呼叫計算結果為:
*main> doubleus 1 3
8*main> doubleus 0 2
4
usedoubleme x y = doubleme x + doubleme y -- 呼叫簡單函式
對了,忘了說了,haskell中注釋是--
。
doublesmallnumber x = if x < 100 then x else 2*x --如果x小於100返回x,否則返回2*x
呼叫結果為:
需要注意的是haskell中if和else一定是一起出現的,else不可以省略,而且本質上if和else都是需要返回乙個值。haskell中所有的函式和表示式都需要返回乙個結果,if語句就是乙個表示式,所以它一定會返回乙個結果。*main> doublesmallnumber 20
20*main> doublesmallnumber 200
400
doublesmallnumber' x = (if x < 100 then x else 2*x) + 1 -- doublesmallnumber返回值加1
我們通常在haskell中在函式名字最後加乙個'
來表示對某個函式稍微修改之後得到的新函式。上面的函式如果把括號去掉,那麼只會在x>=100
的時候加1了。另外需要注意的是,haskell的函式名字開頭不能是大寫字母。
conano'brien = "it's a-me, conan o'brien!" -- 沒有引數的函式
上面的conano'brien函式定義好了之後,conano'brien
就與字串"it's a-me, conan o'brien!"
等價了,而且字串的值是不可以修改的。
熱愛程式設計,熱愛機器學習! github: github blog: 個人部落格站點:不再維護)
WeUI 簡明入門指南
之前做智慧型校園的時候想找乙個開源的移動端 ui 框架,找了好多個,比如 的 sui mobile qq 的 frozenui 等,基本都沒有滿意的,這些框架要麼過於龐雜,要麼太像 ios!最後無意間發現了 weui 這個框架,一眼就愛上了!加了 weui 官方 qq 群後發現好多童鞋都不知道怎麼用...
DuiLib入門簡明教程
2013 duilib入門教程彙總 2013 duilib入門簡明教程 前言 1 2013 duilib入門簡明教程 vs環境配置 2 2013 duilib入門簡明教程 第乙個程式 hello world 3 2013 duilib入門簡明教程 響應按鈕事件 4 2013 duilib入門簡明教程...
MySQL簡明入門教程
宣告 sql關鍵字不區分大小寫,注釋使用 建立mt test這個資料庫 create datebase mt test 選擇使用資料庫,意思是後面的操作的資料庫表預設使用該資料庫 use mt test 刪除資料庫 drop datebase mt test 建立表,f id是自增欄位,f id也是...