天天看點

Haskell學習-初識簡介安裝



簡介

haskell是一門函數式語言,差別于 c/c++這樣的指令式語言,它是無狀态的。在指令式語言中的函數,更多是一堆控制流程,電腦會按照指令逐個執行語句,而函數式程式設計中,則是告訴電腦“是什麼”,在定義函數時,更像是“數學意義上的定義”,比如,定義階乘是“從1到某數的所有整數相乘”。這種和狀态無關的特性,使其沒有副作用,因為在數學中,相同的函數參數求值,結果總是相同的。

函數式程式設計有很多不錯的優點,上述的無副作用意味着可重入,并發程式設計非常有優勢。

第二是惰性求值,即在真正需要結果前,不會被求值。這個也可以通過數學來解釋,比如g(x)=2x, f(x)=2g(x),當我們給定 x = 2時,我們可以從最内層的函數代入,一步步算出最終結果,也可以直接換算出 f(x)=4x,一步算出結果。這種數學上的特性在 haskell中是這樣展現的,比如一個函數 double, 它将一個 List中的元素都乘以 2,如果我求一個 List 的8倍,則要寫成 double(double(double(xs))),在指令式語言中,我們不得不周遊xs三遍,而在函數式程式設計中,這隻是對資料的一系列變形,隻要進行函數變換公式,周遊一次 List 即可。這還展現在在結果真正需要時,函數才會執行,haskell中可以定義無限長的 List,這樣的 List 不會溢出,因為在我們在真正需要 List 某一位的資料之前,List 是不存在的。

第三是靜态類型系統。我們在定義函數時,需要明确指定參數和函數類型,這樣很大一部分錯誤便能在編譯時被發現。當然,haskell的自動類型推導非常強大,我們可以精簡程式不必每個量都手寫類型。

安裝

在windows上安裝也十分友善,去官網下載下傳 setup包,一路 next 就行,忘了要不要手動設定 path 了,這裡主要把 bin 目錄包含在 path 中。

最常用的是ghci互動模式(其他我暫時也不懂),這裡可以互動執行,即時得到結果。也可以将 haskell語句寫在 .hs 腳本中,在 ghci 中用 :l xxx.hs調用。

PS C:\Users\lyy> ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>
           

繼續閱讀