Haskell函式式程式設計之一 語言初體驗

2021-09-06 08:42:48 字數 3453 閱讀 9420

如果你是使用面向對像語言進行程式設計的程式設計師,那麼你應該去了解掌握一門動態語言。而動態語言的魔力之一就是函式式程式設計。而要學習了解函式式程式設計,那麼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進入互動模式。

123

4567

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!"

123

45

prelude> :l helloworld.hs

[1 of 1] compiling main ( helloworld.hs, interpreted )

ok, modules loaded: main.

*main> main

"hello world!"

123

4567

8910

prelude> 1 + 2

3prelude> 3 - 1

2prelude> 3 * 4

12prelude> 5 / 1

5.0prelude> 10 / (-5)

-2.0

注意對負數進行操作時要將其用()括起來,否則系統會報錯。

123

4567

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

123

45

prelude> let ishello x

=if x==

"hello"

then true else false

prelude> ishello "hello"

true

prelude> ishello "world"

false

注意這裡的條件判斷中的else是不可以省略的,這樣保證條件語句總會返回乙個值。所以我們可以將整個if..then..elsepattern看做乙個表示式。

如果在指令碼檔案中寫的話不需要使用let關鍵字。並且也可以採用另乙個寫法。

ishello.hs

1

23

ishellox|

x=="hello"

=true

|otherwise

=false

|表示或,otherwise關鍵字表示其它的情況。當然你也可以將這三行**寫成一行,這樣也是能夠正常執行的。分成三行只是為了更加可讀。

還有第三種寫法,實際上與面對物件語言中的switch…case語句有些類似。

ishello.hs

1

23

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就是不純的,看下面...