如果你是使用面向對像語言進行程式設計的程式設計師,那麼你應該去了解掌握一門動態語言。而動態語言的魔力之一就是函式式程式設計。而要學習了解函式式程式設計,那麼haskell是乙個不錯的選擇。
haskell是是一門純函式式程式語言(purely functional programming language)。在其世界中函式是第一等物件。並且在haskell中沒有賦值,例如你指派a的值為5,然後你無法再給a分配其它的值。所以你不能像命令式語言那樣命令電腦「要做什麼」,而是通過函式來描述出問題「是什麼」。
作為乙個純的函式式程式語言,它支援惰性求值、模式匹配、列表解析、型別類、型別多型……
別著急,讓我們慢慢來解開函式式程式設計的面紗。
mac平台的使用者可以通過homebrew進行安裝。
在terminal下輸入brew install haskell-platform
即可。
安裝完畢後haskell platform的直譯器ghc就已經在你的電腦上了。ghc可以解釋執行haskell指令碼,即字尾名為.hs的檔案。你可可以通過在terminal輸入ghci
進入互動模式。
1234567
891011
twer@bowen-huang:~$ ghci
ghci, version 7.4.2: :? for
help
loading package ghc-prim ... linking … done.
loading package integer-gmp ... linking … done.
loading package base ... linking … done.
prelude> 1+2
3prelude> 3*4
12prelude> 5/1
5.0
關於haskell的編輯器你可以使用任何喜歡的編輯器:vim、emacs、sublime、textmate…..我比較喜歡sublime。因為在sublime自帶haskell的快捷編譯執行。只需要按ctrl+b來直接執行scripts指令碼。
在ghci互動模式下可以使用:l
命令來load乙個haskell指令碼,然後就可以呼叫此指令碼中的函式。我們先寫乙個』hello world!』程式,然後通過ghci來load和呼叫.
helloworld.hs
1
main
=print
$"hello world!"
12345
prelude> :l helloworld.hs
[1 of 1] compiling main ( helloworld.hs, interpreted )
ok, modules loaded: main.
*main> main
"hello world!"
1234567
8910
prelude> 1 + 2
3prelude> 3 - 1
2prelude> 3 * 4
12prelude> 5 / 1
5.0prelude> 10 / (-5)
-2.0
注意對負數進行操作時要將其用()括起來,否則系統會報錯。
1234567
891011
1213
1415
1617
1819
2021
2223
24
prelude> 5
== 5
true
prelude> 10
== 8
false
prelude> 5 /= 5
false
prelude> 10 /= 8
true
prelude> 5 >= 3
true
prelude> 5 <= 3
false
prelude> true && true
true
prelude> true && false
false
prelude> false || false
false
prelude> true || false
true
prelude> not true
false
prelude> not false
true
12345
prelude> let ishello x
=if x==
"hello"
then true else false
prelude> ishello "hello"
true
prelude> ishello "world"
false
注意這裡的條件判斷中的else是不可以省略的,這樣保證條件語句總會返回乙個值。所以我們可以將整個if..then..else
pattern看做乙個表示式。
如果在指令碼檔案中寫的話不需要使用let
關鍵字。並且也可以採用另乙個寫法。
ishello.hs
123
ishellox|
x=="hello"
=true
|otherwise
=false
|表示或,otherwise關鍵字表示其它的情況。當然你也可以將這三行**寫成一行,這樣也是能夠正常執行的。分成三行只是為了更加可讀。
還有第三種寫法,實際上與面對物件語言中的switch…case
語句有些類似。
ishello.hs
123
ishellox=
ca***of
"hello"
->
true
otherwise
->
false
這和第二種寫法很類似。其實第二種寫法本質上就是case
語句,它只是case
語句的乙個語法糖而已。
另外,在haskell中是沒有各種迴圈語句的,如果要實現相似的特性當然要使用遞迴了。
第二節中,我們會討論這個問題。
c DLL程式設計之一
dll的優點 簡單的說,dll有以下幾個優點 1 節省記憶體。同乙個軟體模組,若是以源 的形式重用,則會被編譯到不同的可執行程式中,同時執行這些exe時這些模組的二進位製碼會被重複載入到記憶體中。如果使用dll,則只在記憶體中載入一次,所有使用該dll的程序會共享此塊記憶體 當然,像dll中的全域性...
RAPI程式設計之一
今天剛開始學習rapi程式設計,先將今天學習的成果放出來,大家學習。如果 有問題,請提出,多謝 在pc上使用vc6,好久沒有用它了。一直在evc4下程式設計,呵呵.rapi功能的實現,需要rapi.dll和rapi.h。在以下的實現中,link的動態庫是c windows system32 rapi...
函式式程式設計之純函式
純函式 我們應該還記得初中的一些數學知識,函式f的概念就是,對於輸入x產生乙個輸出y f x 這就是普通的純函式。它的定義是 相同的輸入,結果總會得到相同的輸出,而且沒有任何可觀察的 也不依賴外部環境的狀態。最常見的乙個例子就是在我們運算元組的時候slice就是純函式,splice就是不純的,看下面...