函數程式語
言: Haskell
   基礎

    黃耀賢


起頭
(Beginning)

Lambda
Calculus
                 函數程式語言: Haskell 基礎
有型態的
Lambda
Calculus...
函數程式語
言: Haskell
   基礎                                             Outline
    黃耀賢


起頭
(Beginning)
                 1 起頭 ...
函數程式語
言: Haskell
   基礎                                           Leibniz 的理想
    黃耀賢


起頭
(Beginning)

Lambda
Calculus
   ...
函數程式語
言: Haskell
   基礎                         Entscheidungsproblem 求解
    黃耀賢


起頭
(Beginning)

Lambda
Calculus
         ...
函數程式語
言: Haskell
   基礎                                    Turing machines 的發展
    黃耀賢


起頭
(Beginning)

Lambda
Calculus

有...
函數程式語
言: Haskell
   基礎                            Lambda calculus 的發展
    黃耀賢


起頭
(Beginning)

Lambda
Calculus         • ...
函數程式語
言: Haskell
   基礎                                            算式的構成
    黃耀賢


起頭
(Beginning)
                 • Lambda...
函數程式語
言: Haskell
   基礎                                    算式的性質
    黃耀賢


起頭
(Beginning)

Lambda           • 範圍: “λ x. M”格...
函數程式語
言: Haskell
   基礎                                                 Combinator
    黃耀賢


起頭
(Beginning)

Lambda
Calculu...
函數程式語
言: Haskell
   基礎                               Reduction (簡化、約化)
    黃耀賢


起頭
(Beginning)

Lambda
Calculus
         ...
函數程式語
言: Haskell
   基礎                       完全化約 (Full Reduction)
    黃耀賢


起頭
(Beginning)

Lambda
Calculus
             ...
函數程式語
言: Haskell
   基礎                 一般化約 (Normal Order Strategy
    黃耀賢
                                      Reduction...
函數程式語
言: Haskell
   基礎                                        Call By Name
    黃耀賢


起頭
(Beginning)      • Call by name較嚴格...
函數程式語
言: Haskell
   基礎                                          Call By Value
    黃耀賢


起頭
(Beginning)      • Call by valu...
函數程式語
言: Haskell
   基礎                                        建立數字計算系統
    黃耀賢


起頭
(Beginning)

Lambda
Calculus          ...
函數程式語
言: Haskell
   基礎                                  建立數字計算系統(續)
    黃耀賢


起頭
(Beginning)        3   遞迴定義數字,將每個自然數 n 的數...
函數程式語
言: Haskell
   基礎                                建立數字計算系統(續)
    黃耀賢


起頭
(Beginning)

Lambda
Calculus
              ...
函數程式語
言: Haskell
   基礎                                   簡單型態系統
    黃耀賢


起頭               • 型態系統由 H. B. Curry 在 1934 年介紹,...
函數程式語
言: Haskell
   基礎                                            Haskell 簡介
    黃耀賢


起頭
(Beginning)

Lambda
Calculus

有型...
函數程式語
言: Haskell
   基礎                             資料值 (Value) 和型態
    黃耀賢


起頭
(Beginning)

Lambda
Calculus         • Has...
函數程式語
言: Haskell
   基礎                                       基本型態
    黃耀賢
                 • Bool
起頭
(Beginning)      • Ch...
函數程式語
言: Haskell
   基礎                                           自訂型態
    黃耀賢


起頭
(Beginning)

Lambda
Calculus         • ...
函數程式語
言: Haskell
   基礎                                     「樹」資料結構
    黃耀賢


起頭
(Beginning)      • data Tree a = Leaf a | ...
函數程式語
言: Haskell
   基礎                                           效能瓶頸
    黃耀賢


起頭
(Beginning)

Lambda
Calculus
          ...
函數程式語
言: Haskell
   基礎                                     減少 ++ 的計算量
    黃耀賢


起頭
(Beginning)

Lambda           • 利用累 積 變...
函數程式語
言: Haskell
   基礎                                減少 ++ 的計算量(續)
    黃耀賢


起頭
(Beginning)

Lambda           • flatten′ (...
函數程式語
言: Haskell
   基礎                               減少 ++ 的計算量(末)
    黃耀賢


起頭
(Beginning)

Lambda
Calculus

有型態的
Lambda
...
函數程式語
言: Haskell
   基礎                                         小結和摘要
    黃耀賢


起頭
(Beginning)
                 本次討論,我們知道了:...
函數程式語
言: Haskell
   基礎                                         將來的內容
    黃耀賢


起頭
(Beginning)

Lambda           將來會談論的項目有:...
函數程式語
言: Haskell
   基礎                                                            參考文獻
    黃耀賢


起頭
(Beginning)

Lambda
Ca...
Upcoming SlideShare
Loading in...5
×

Haskell Foundations

2,453

Published on

Chinese (zh-tw) Haskell Fundamentals

Published in: Education
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,453
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
46
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Haskell Foundations

  1. 1. 函數程式語 言: Haskell 基礎 黃耀賢 起頭 (Beginning) Lambda Calculus 函數程式語言: Haskell 基礎 有型態的 Lambda Calculus (Typed) 黃耀賢 Haskell 基礎 (Basics) 小結 (Subtitle) edward@tc.program.com.tw 參考文獻 微程式技術研討會 (Bibliography) October 22, 2008 1 / 30
  2. 2. 函數程式語 言: Haskell 基礎 Outline 黃耀賢 起頭 (Beginning) 1 起頭 (Beginning) Lambda Calculus 有型態的 Lambda 2 Lambda Calculus Calculus (Typed) Haskell 基礎 3 有型態的 Lambda Calculus (Typed) (Basics) 小結 (Subtitle) 4 Haskell 基礎 (Basics) 參考文獻 (Bibliography) 5 小結 (Subtitle) 6 參考文獻 (Bibliography) 2 / 30
  3. 3. 函數程式語 言: Haskell 基礎 Leibniz 的理想 黃耀賢 起頭 (Beginning) Lambda Calculus 1 通用語言:創造一種語言,使能描述各種問題。 有型態的 Lambda Frege 和 Russell 等數學家,以初階述語邏輯所描述的集 Calculus (Typed) 合論形式解決。 Haskell 基礎 (Basics) 2 決策問題:找到一種決策法,將所有以通用語言描述的 小結 問題解決。 (Subtitle) 為一哲學問題:「能夠以通用語言解答所有難題嗎?」,號稱為 參考文獻 (Bibliography) Entscheidungsproblem /Entquot;S2IdUNspô6bl@m/ (德語,意為「決策問 題」)。 3 / 30
  4. 4. 函數程式語 言: Haskell 基礎 Entscheidungsproblem 求解 黃耀賢 起頭 (Beginning) Lambda Calculus 同時由 Church 與 Turing 各自證為否定。為了證明,需要下 有型態的 Lambda 列工具 Calculus (Typed) • Lambda calculus:Alonzo Church 在 1936 年發明的正式 Haskell 基礎 系統,並定義可執行函數的標記法。 (Basics) 小結 • Turing machines:Alan Turing 在 1936 年 7 月發明的機 (Subtitle) 器類型,並定義可執行函數的標記法。 參考文獻 (Bibliography) 同年,Turing 證明二種模型有同樣強度,是由於定義了相同的可執 行函數。 4 / 30
  5. 5. 函數程式語 言: Haskell 基礎 Turing machines 的發展 黃耀賢 起頭 (Beginning) Lambda Calculus 有型態的 Lambda Calculus (Typed) Haskell 基礎 (Basics) 小結 (Subtitle) Figure: Turing Machine 的藝術式圖現。1 參考文獻 (Bibliography) • Von Neumann 計算機以 Turing machine 概念為基礎。 • 命令程式語言,包括組合語言、 Fortran 、 Pascal 等等 都根據 Turing machine 接受指令的方式而出現。 1 圖摘自 http://en.wikipedia.org/wiki/Turing machine gallery 5 / 30
  6. 6. 函數程式語 言: Haskell 基礎 Lambda calculus 的發展 黃耀賢 起頭 (Beginning) Lambda Calculus • Alonzo Church 在 1936 年提出 lambda calculus 正式系 有型態的 Lambda 統,並定義可執行函數的標記法。 Calculus (Typed) • Haskell Brookes Curry 和 Alonzo Church 先後在 1934 年 Haskell 基礎 和 1940 年介紹有型態的 lambda calculus 。 (Basics) 小結 • 函數程式語言,包括 Miranda 、 ML 、 Haskell 等等都 (Subtitle) 根據 lambda calculus 而出現。 參考文獻 (Bibliography) • Lisp 是較早期的例子,但混雜一些其他概念。 • Reduction machines 由函數程式的執行而出現。 6 / 30
  7. 7. 函數程式語 言: Haskell 基礎 算式的構成 黃耀賢 起頭 (Beginning) • Lambda calculus 的算式都表達為函數,由 Lambda Lambda Term (lambda 詞彙) 構成。 Calculus • 任意變數就是 lambda term 。 有型態的 Lambda 例如: x Calculus (Typed) x′ Haskell 基礎 (Basics) • 一些 lambda term 放在一起,也是 lambda term。 小結 例如: x x ′ (Subtitle) (x x ′ ) y z 參考文獻 (Bibliography) • 以“λ 變 數 . lambda term”格式構成的詞彙,也是 lambda term。 例如: λx. x (lambda abstraction , lambda 抽象 化) λx y . x y 7 / 30
  8. 8. 函數程式語 言: Haskell 基礎 算式的性質 黃耀賢 起頭 (Beginning) Lambda • 範圍: “λ x. M”格式的 lambda term ,存在於 M 中的 x Calculus 都是「受限制的」(bound)。例如: 有型態的 Lambda x ((λx. x + 1)y ) z ′ Calculus (Typed) x 是受 限 制 的 變 數 。 受 Haskell 基礎 (Basics) • 不受限制的變數稱為自 由 變 數 (free variable)。 自 小結 • 封 閉 的 lambda 詞 彙 :若一則 lambda 詞彙中沒有自由 (Subtitle) 參考文獻 變數(意思是所有的變數都受限制),是封閉 lambda (Bibliography) 詞彙(closed λ term)。 • 不是封閉 lambda 詞彙的,是開 放 的 lambda 詞 彙 (open 開 λ term)。 8 / 30
  9. 9. 函數程式語 言: Haskell 基礎 Combinator 黃耀賢 起頭 (Beginning) Lambda Calculus • 如果一則 lambda 詞彙是封閉的,就是一個 combinator 有型態的 Lambda 。 Calculus (Typed) • Identity combinator I ≡ λx. x。 Haskell 基礎 • K ≡ λxy . x。 (Basics) 小結 • K∗ ≡ λxy . y 。 (Subtitle) 參考文獻 • S ≡ λxyz. x z (y z)。 (Bibliography) • Fixpoint combinator Y ≡ λf . (λx. f (x x)) (λx. f (x x)) 使 ∀F . F (Y F ) = Y F 。 9 / 30
  10. 10. 函數程式語 言: Haskell 基礎 Reduction (簡化、約化) 黃耀賢 起頭 (Beginning) Lambda Calculus • 令E 為構成一函數程式的式子,E 可以有一些改寫規則。 有型態的 Lambda Reduction 是將P,E 的一部份,根據改寫規則取代為另 Calculus (Typed) 一個式子P ′ ,簡列為: Haskell 基礎 (Basics) E [P] → E [P ′ ] 小結 (Subtitle) • 可 化 簡 的 式 子 : λ 開頭的式子和其他參數放在一起,如 參考文獻 (λv .M)N,就可以化簡。 (Bibliography) • 例如: (λxy . s x y ) u v −→ s x y [x := u, y := v ] ≡ s u v 10 / 30
  11. 11. 函數程式語 言: Haskell 基礎 完全化約 (Full Reduction) 黃耀賢 起頭 (Beginning) Lambda Calculus • 完 全 化 約 (full reduction)任何可化簡的式子可在任何時 有型態的 候化簡。 Lambda Calculus • 例如: (Typed) Haskell 基礎 (Basics) 小結 id(id(λz.id z)) → id(λz.id z) (Subtitle) 參考文獻 → id(λz.z) (Bibliography) → λz.z → 11 / 30
  12. 12. 函數程式語 言: Haskell 基礎 一般化約 (Normal Order Strategy 黃耀賢 Reduction) 起頭 (Beginning) Lambda Calculus • 一 般 化 約 (normal order strategy)最外邊、最左邊的可 有型態的 Lambda Calculus 化簡式先化簡。 (Typed) • 例如: Haskell 基礎 (Basics) 小結 (Subtitle) id(id(λz.id z)) → id(λz.id z) 參考文獻 (Bibliography) → λz.id z → λz.z → 12 / 30
  13. 13. 函數程式語 言: Haskell 基礎 Call By Name 黃耀賢 起頭 (Beginning) • Call by name較嚴格,不容許在抽象化的 lambda 詞 Lambda 彙(即 λ 開頭的 lambda 詞彙)中做化約。 Calculus 有型態的 • 例如: Lambda Calculus (Typed) Haskell 基礎 id(id(λz.id z)) → id(λz.id z) (Basics) 小結 → λz.id z (Subtitle) → 參考文獻 (Bibliography) • Call by name又稱為 lazy evaluation。 • Haskell採用優化的 lazy evaluation,所有相同的 lambda 詞彙,第一個已經化簡的就儲存起來,後續的詞彙直接 參考第一個化簡的結果,而節省重複的化簡動作。 13 / 30
  14. 14. 函數程式語 言: Haskell 基礎 Call By Value 黃耀賢 起頭 (Beginning) • Call by value由最外邊的可化約式,並要先將參數化 Lambda Calculus 約。 有型態的 • 例如: Lambda Calculus (Typed) Haskell 基礎 (Basics) id(id(λz.id z)) → id(λz.id z) 小結 (Subtitle) → λz.id z 參考文獻 → (Bibliography) • Call by value又稱為 strict evaluation。 • (λbfg . if b then f else g ) b f g 的化約不能做 call-by-value ,必須做 call-by-name 。 14 / 30
  15. 15. 函數程式語 言: Haskell 基礎 建立數字計算系統 黃耀賢 起頭 (Beginning) Lambda Calculus 1 定義 true ≡ K 和 false ≡ K∗ 。 有型態的 Lambda 2 定義選擇結構 [M, N] ≡ λz. z M N ,其中 z M N 表示 Calculus (Typed) if B then M else N。於是, Haskell 基礎 [M, N] true = M (Basics) [M, N] false = N 小結 (Subtitle) Proof. 參考文獻 (Bibliography) [M, N] true ≡ (λz. z M N) (λxy . x) = z M N[z := (λxy . x)] ≡ (λxy . x) M N = x[x := M, y := N] ≡ M 15 / 30
  16. 16. 函數程式語 言: Haskell 基礎 建立數字計算系統(續) 黃耀賢 起頭 (Beginning) 3 遞迴定義數字,將每個自然數 n 的數字定義為 n : Lambda Calculus 0 =I 有型態的 n + 1 = [false, n ] Lambda Calculus 4 定義零和前後關係: (Typed) S+ n = n + 1 Haskell 基礎 (Basics) P− n + 1 = n 小結 (Subtitle) Zero 0 = true 參考文獻 Zero n + 1 = false (Bibliography) Proof. S+ ≡ λx. [false, x] P− ≡ λx. x false Zero ≡ λx. x true 16 / 30
  17. 17. 函數程式語 言: Haskell 基礎 建立數字計算系統(續) 黃耀賢 起頭 (Beginning) Lambda Calculus • 想定義加法運算如 有型態的 Lambda Add(0, y) = y Calculus (Typed) Add(x+1, y) = 1+Add(x, y) Haskell 基礎 • 意思和這個 lambda 詞彙相同: (Basics) 小結 Add x y = if Zero x then y else S+ (Add (P− x) y ) (Subtitle) • 用 Y combinator 製作遞迴: 參考文獻 (Bibliography) Add ≡ Y(λaxy . if Zero x then y else S+ (a (P− x) y )) 17 / 30
  18. 18. 函數程式語 言: Haskell 基礎 簡單型態系統 黃耀賢 起頭 • 型態系統由 H. B. Curry 在 1934 年介紹,之後 1958 年 (Beginning) 和 1972 年做了一些改變,用自然的方式推導 lambda Lambda Calculus term 的型態。 有型態的 Lambda • T 為型態的集合。 Calculus (Typed) • 任何 lambda term M 都可以被指派為一個型態 σ ,只要 Haskell 基礎 σ ∈ T。 (Basics) 小結 • 函數套用: (Subtitle) M:σ→τ N :σ 參考文獻 (Bibliography) MN :τ • 函數抽象化: x:σ . . . M:τ λx. M : σ → τ 18 / 30
  19. 19. 函數程式語 言: Haskell 基礎 Haskell 簡介 黃耀賢 起頭 (Beginning) Lambda Calculus 有型態的 1 發明於 1987 年,以 Haskell Brookes Curry 為名。 Lambda Calculus 2 Haskell 98 標準之後,舊版語言已拋棄。 (Typed) Haskell 基礎 3 Haskell 是有 型 態 的函 數 式 程式語言。 有 函 (Basics) 小結 4 以 standard prelude 為預設標準函式庫。 (Subtitle) 5 有關資訊請參考 http://haskell.org 。2 參考文獻 (Bibliography) 2 http://haskell.org/ghc 為 GHC (一種 Haskell 98 的實作) 發佈的 網站,提供了 Windows 、 Linux 、 Solaris 和 Mac OS 版本的安裝程式。 19 / 30
  20. 20. 函數程式語 言: Haskell 基礎 資料值 (Value) 和型態 黃耀賢 起頭 (Beginning) Lambda Calculus • Haskell 預設下列資料型態: 有型態的 • 5 :: Integer Lambda Calculus • ’K’ :: Char (Typed) • False :: Bool Haskell 基礎 • [3,2,1] :: [Integer] (Basics) • (’b’, True) :: (Char, Bool) 小結 (Subtitle) • id :: a -> a 參考文獻 id x = x (Bibliography) • 測 定 型 態 (Typing):“:: Type ” 是「有· · · 型態」的意 思,會做型態的建立和檢查。 20 / 30
  21. 21. 函數程式語 言: Haskell 基礎 基本型態 黃耀賢 • Bool 起頭 (Beginning) • Char:用單引號圍起的字母。 Lambda • String:即一列 Char 資料,用雙引號圍起的許多字 Calculus 有型態的 母。 ”Hello” 就是 [’H’,’e’,’l’,’l’,’o’] 。 Lambda Calculus • Int:固定精確度的整數,值介 −231 ∼ 231 − 1 之間。 (Typed) • Integer:任意精確度的整數。 Haskell 基礎 (Basics) • Float:單精確度的浮點數。 小結 (Subtitle) • List 型態:用方括號包含型態標記為指定型態,構成 list 參考文獻 型態。 [Int] 是整數型態的 list 型態。 (Bibliography) • Tuple 型態:用圓括號包含逗點分隔的多個型態,構成 tuple 型態。 (Int, Int) 是一對整數型態的 tuple 型 態。 • 函數型態:用 -> 箭頭連接多個型態,構成函數型態。 Int -> Int 是從一個整數型態對應到另一個整數型態 的函數型態。 21 / 30
  22. 22. 函數程式語 言: Haskell 基礎 自訂型態 黃耀賢 起頭 (Beginning) Lambda Calculus • 語法: 有型態的 Lambda Calculus data Type-constructor = Data-constructor s (Typed) • 定義「顏色」型態: Haskell 基礎 (Basics) data Color = Red | Orange | Yellow 小結 (Subtitle) | Green | Blue | Indigo | Violet 參考文獻 • 定義「點」型態:只有一個 data constructor ,必須參考 (Bibliography) 其他型態來建立型態。 data Point a = Pt a a 22 / 30
  23. 23. 函數程式語 言: Haskell 基礎 「樹」資料結構 黃耀賢 起頭 (Beginning) • data Tree a = Leaf a | Branch (Tree a) (Tree a) Lambda Calculus • flatten :: Tree a -> [a] 有型態的 flatten (Leaf x) = [x] Lambda Calculus flatten (Branch x y) = flatten x ++ flatten y (Typed) • 練習: Haskell 基礎 (Basics) 1 將上述「樹」展平程式打字輸入在文字檔 test.hs ,存檔。 小結 2 確定 GHC 已安裝。 (Subtitle) 3 在命令列模式視窗中,切換到 test.hs 所存放位置,執行 ghci 參考文獻 。 (Bibliography) 4 在 GHCi 環境輸入 :l test.hs 載入程式。若回應錯誤訊息請 檢查程式碼。 5 在 GHCi 環境輸入 flatten (Branch (Branch (Leaf ’a’) (Leaf ’b’)) (Leaf ’c’)) 並觀察結果。 6 在 GHCi 環境輸入 :q 關閉 GHCi 環境。 23 / 30
  24. 24. 函數程式語 言: Haskell 基礎 效能瓶頸 黃耀賢 起頭 (Beginning) Lambda Calculus • (++) :: [a] -> [a] -> [a] 有型態的 Lambda []++ys = ys Calculus (Typed) (x:xs)++ys = x:(xs++ys) Haskell 基礎 • data Tree a = Leaf a | Branch (Tree a) (Tree a) (Basics) 小結 • flatten :: Tree a -> [a] (Subtitle) flatten (Leaf x) = [x] 參考文獻 (Bibliography) flatten (Branch x y) = flatten x ++ flatten y • 計算複雜度是 O 2 。 24 / 30
  25. 25. 函數程式語 言: Haskell 基礎 減少 ++ 的計算量 黃耀賢 起頭 (Beginning) Lambda • 利用累 積 變 數 (accumulating argument)減少 ++ 的計 累 Calculus 有型態的 算量。 Lambda Calculus • 令 flatten′ t acc = flatten t ++ acc , (Typed) Haskell 基礎 • flatten′ (Leaf x) acc (Basics) = { 由 flatten′ 的定義, } 小結 (Subtitle) flatten (Leaf x) ++ acc 參考文獻 = { 套用 flatten } (Bibliography) [x] ++ acc = { 套用 ++ } x:acc 25 / 30
  26. 26. 函數程式語 言: Haskell 基礎 減少 ++ 的計算量(續) 黃耀賢 起頭 (Beginning) Lambda • flatten′ (Tree x y) acc Calculus = { 由 flatten′ 的定義 } 有型態的 Lambda flatten (Tree x y) ++ acc Calculus (Typed) = { 套用 flatten } Haskell 基礎 (flatten x ++ flatten y) ++ acc (Basics) = { 由 ++ 的結合律 } 小結 (Subtitle) flatten x ++ (flatten y ++ acc) 參考文獻 = { 將 x 歸納 } (Bibliography) flatten′ x (flatten y ++ acc) = { 將 y 歸納 } flatten′ x (flatten′ y acc) 26 / 30
  27. 27. 函數程式語 言: Haskell 基礎 減少 ++ 的計算量(末) 黃耀賢 起頭 (Beginning) Lambda Calculus 有型態的 Lambda Calculus • 於是, (Typed) Haskell 基礎 flatten′ :: Tree a -> [a] -> [a] (Basics) flatten′ (Leaf x) acc = x:acc 小結 (Subtitle) flatten′ (Tree x y) acc = flatten′ x (flatten′ y acc) 參考文獻 (Bibliography) 27 / 30
  28. 28. 函數程式語 言: Haskell 基礎 小結和摘要 黃耀賢 起頭 (Beginning) 本次討論,我們知道了: Lambda • 函數語言的源頭是 lambda calculus ,相對於命令式語言 Calculus 的源頭是 Turing machines. 有型態的 Lambda Calculus • Lambda calculus 定義了詞彙的構成與化簡規則。藉此可 (Typed) 以建立數學計算系統。 Haskell 基礎 (Basics) • Lambda 詞彙可以附加型態,並有合理的型態推導規 小結 則。 (Subtitle) 參考文獻 • Lambda calculus 的化簡有幾種策略,包括完全化簡、一 (Bibliography) 般化簡、 call-by-name 和 call-by-value 。 • Haskell 是有型態的函數語言。從基本的資料值開始,每 個詞彙都可以合理地推導型態。 • Haskell 容許以關鍵字 data 自訂型態。 28 / 30
  29. 29. 函數程式語 言: Haskell 基礎 將來的內容 黃耀賢 起頭 (Beginning) Lambda 將來會談論的項目有: Calculus • 運算元。 有型態的 Lambda Calculus • 類別。 (Typed) • Haskell 的標準函式庫 (standard prelude) 。 Haskell 基礎 (Basics) • 以 lambda 詞彙方式撰寫 Haskell 程式。 小結 (Subtitle) • 以數學方式撰寫 Haskell 程式。 參考文獻 (Bibliography) • 區域變數。 • 高階函數。 • 輸入和輸出。 29 / 30
  30. 30. 函數程式語 言: Haskell 基礎 參考文獻 黃耀賢 起頭 (Beginning) Lambda Calculus 1 Benjamin C. Pierce. Types and Programming Language. MIT, 2002. 有型態的 2 Graham Hutton. Programming in Haskell. Cambridge, 2007. Lambda Calculus 3 Henk Barendregt and Erik Barendsen. Introduction to Lambda (Typed) Calculus. [Online] Available: Haskell 基礎 ftp://ftp.cs.kun.nl/pub/CompMath.Found/lambda.pdf (Oct, 2008). (Basics) 4 Hal Daum´ III. Yet another Haskell tutorial. [Online] Available: e 小結 (Subtitle) http://www.cs.utah.edu/ hal/docs/daume02yaht.pdf (Oct, 2008). 參考文獻 5 Paul Hudak, John Peterson, and Joseph Fasel. A gentle introduction (Bibliography) to Haskell: Version 98. [Online] Available: http://www.haskell.org/tutorial/ (Oct, 2008). 30 / 30
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×