實用函數編程

《序》

感謝

關於本書

關於封面

第一部分 學習函數式思維

  第一章 不同的思維

    1.1 什麼是函數式編程?

    1.2 通往實用函數編程之路

    1.3 用函數式編程提高生產力

        1.3.1 函數範式

        1.3.2 聲明式編程風格

        1.3.3 瞭解程序的運行

        1.3.4 設計併發友好的應用程序

        1.3.5 函數風格如何形成代碼

    1.4 函數式編程示例

        1.4.1 用聲明式風格表達意圖

            1.4.1.1 用 LINQ 處理數據

            1.4.1.2 用 XAML 描述用戶界面

            1.4.1.3 聲明式函數動畫

        1.4.2 理解使用不可變性的代碼

             1.4.2.1 閱讀函數式程序

        1.4.3 編寫有效的並行程序

            1.4.3.1 並行化不可變程序

            1.4.3.2 使用 PLINQ 的聲明式並行

    1.5 F# 簡介

        1.5.1 用 F# 寫 Hello world

        1.5.2 從簡單到實用

            1.5.2.1 從簡單開始

            1.5.2.2 到穩健結束

    1.6 小結

   第二章 函數編程的核心概念

    2.1 函數編程的基礎

    2.2 函數程序的計算       2.2.1 使用不可變值

       2.2.2 使用不可變數據結構

       2.2.3 用遞歸改變程序狀態

       2.2.4 用表達式代替語句

       2.2.5 計算 (Computation by calculation)

    2.3 編寫聲明式代碼

        2.3.1 函數也是值

        2.3.2 高階函數(Higher-order functions)

            2.3.2.1 使用高階函數擴展詞彙

            2.3.2.2 面向語言編程(Language-oriented programming)

    2.4 函數式類型和值

        2.4.1 C# 和 F# 中的類型推斷

        2.4.2 差別聯合類型(discriminated union type)

        2.4.3 模式匹配(Pattern matching)

        2.4.4 編譯時檢查程序

            2.4.4.1 度量單位(UNITS OF MEASURE)

    2.5 第二章小結


    第三章 F# 和 C# 中元組、列表和函數

    3.1 值和函數的聲明

        3.1.1 值的聲明和作用域

        3.1.2 函數的聲明

            3.1.2.1 函數簽名(FUNCTION SIGNATURES)

            3.1.2.2 嵌套函數聲明(NESTED FUNCTION DECLARATIONS)

        3.1.3 聲明可變值

    3.2 使用不可變數據結構

        3.2.1元組類型(tuple)

            3.2.1.1 在 F# 中使用元組

            3.2.1.2 在 C# 中使用元組

        3.2.2 用 C# 實現元組類型

            3.2.2.1 更好地推斷 C# 元組類型

        3.2.3 計算元組

        3.2.4 模式匹配元組

    3.3 列表和遞歸

        3.3.1 遞歸計算

        3.3.2 函數式列表

            3.3.2.1 用模式匹配分解列表

        3.3.3 C# 中的函數式列表

        3.3.4 處理函數式列表

            3.3.4.1 用 C# 求列表中數字的和

            3.3.4.2用 F# 求列表中數字的和

    3.4 函數也是值

        3.4.1 處理數字列表

            3.4.1.1 在 C# 中傳遞函數作爲參數值

            3.4.1.2 在 F# 中傳遞函數作爲參數值

        3.4.2 參數化函數的好處

    3.5 第三章小結


    第四章 通過示例探索 F# 和 .NET 庫

    4.1 用 F# 繪製餅圖

    4.2 用 FSI 編寫和測試代碼

        4.2.1 加載和解析數據

        4.2.2 計算數據

    4.3 創建控制檯應用程序

    4.4 創建 Windows Forms 應用程序

        4.4.1 創建用戶界面

        4.4.2 繪製圖形

            4.4.2.1 創建隨機顏色的畫筆

            4.4.2.2 繪製餅圖部分

            4.4.2.3 用函數繪圖

            4.4.2.4 繪製整個圖表

            4.4.2.5 添加文本標籤

        4.4.3 創建 Windows 應用程序

    4.5 第四章小結

    

第二部分 函數技術的基礎

    第五章 局部使用函數值

    5.1 什麼是值?

        5.1.1 基本類型、值類型和對象

        5.1.2 認識值和數據

    5.2 多值(Multiple values)

        5.2.1 F# 和 C# 中的多值

            5.2.1.1 用元組代替 out 參數

        5.2.2 元組類型和值的構造函數

        5.2.3 組合使用元組

            5.2.3.1 避免複雜的元組

    5.3 可選值(Alternative values)

        5.3.1 F# 中的差別聯合(discriminated unions)

        5.3.2 使用可選值

            5.3.2.1 用 F# 匹配差別聯合

            5.3.2.2 用 C# 模擬差別聯合

        5.3.3 添加類型還是函數

        5.3.4 F# 中的選項(option)類型

            5.3.4.1 實現 F# 中簡單的選項類型

    5.4 泛型值(Generic values)

        5.4.1 在 C# 中實現選項類型

        5.4.2 F# 中的泛型選項類型

        5.4.3 值的類型推斷

            5.4.3.1 C# 3.0 中的類型推斷

            5.4.3.2 F# 中的類型推斷

        5.4.4 寫泛型函數

    5.5 函數值

        5.5.1 Lambda 函數

            5.5.1.1 類型批註、動作和語句塊(TYPE ANNOTATIONS, ACTIONS, AND STATEMENT BLOCKS)

        5.5.2 函數類型

            5.5.2.1 函數作爲參數值和返回值

        5.5.3 多參數函數

            5.5.3.1 散函數應用(PARTIAL FUNCTION APPLICATION)

    5.6 第五章小結


    第六章 使用高階函數處理值

    6.1 泛型高階函數

        6.1.1 F# 中的泛型函數

        6.1.2 自定義運算符

            6.1.2.1 在 C# 中模擬自定義運算符

           6.1.2.2 F# 的管道運算符

    6.2 處理元組

        6.2.1 使用函數處理元組

        6.2.2 C# 中處理元組的方法

    6.3 處理計劃

        6.3.1 處理計劃列表

        6.3.2 在 C# 中處理計劃

    6.4 處理選項類型

        6.4.1 使用 map 函數

        6.4.2 使用 bind 函數

        6.4.3 分步分析(Evaluating)示例

        6.4.4 實現選項類型的操作

           6.4.4.1 在 C#中使用選項類型

    6.5 使用函數

        6.5.1 函數組合

        6.5.2 C# 中的函數組合

    6.6 類型推斷

        6.6.1 F# 中函數調用的類型推斷

        6.6.2 自動泛型化(automatic generalization)

    6.7 處理列表

        6.7.1 用F# 實現列表

        6.7.2 理解列表函數的類型簽名

            6.7.2.1 處理列表

        6.7.3 實現列表函數

            6.7.3.1 在 C# 中實現 fold

    6.8 通用處理語言

        6.8.1 映射、篩選和摺疊(Mapping, filtering, and folding)

        6.8.2 列表的綁定操作

    6.9 第六章小結

    第七章 以數據爲中心的程序設計

    7.1 函數式數據結構

        7.1.1 使用 F# 記錄類型

            7.1.1.1 處理記錄

        7.1.2 C# 中的函數式數據結構

    7.2 平面文檔的表示

        7.2.1 繪製元素

        7.2.2 在窗體上顯示繪圖

    7.3 表示結構化文檔

        7.3.1 轉換表示

        7.3.2 用 XML 表示文檔

    7.4 寫操作

        7.4.1 用映射操作進行更新

        7.4.2 使用聚合操作進行計算

    7.5 面向對象的表示方法

        7.5.1 用結構模式表示數據

            7.5.1.1複合設計模式(THE COMPOSITE DESIGN PATTERN)

            7.5.1.2 裝飾設計模式(THE DECORATOR DESIGN PATTERN)

    第八章 以行爲爲中心的程序設計

    8.1 使用行爲集合

        8.1.1 把行爲表示爲對象

        8.1.2 在 C# 中把行爲表示成函數

        8.1.3 在 C# 中使用函數集合

        8.1.4 在 F# 中使用函數列表

    8.2 用於處理函數的習慣用語

        8.2.1 策略設計模式(The strategy design pattern)

        8.2.2 命令設計模式(The command design pattern)

            8.2.2.1 在 C# 中使用命令模式捕獲狀態

        8.2.3 在 F# 使用閉包捕獲狀態

            8.2.3.1 可變狀態使用引用單元

            8.2.3.2 在閉包中捕捉引用單元

    8.3 使用組合行爲

        8.3.1 函數的記錄

        8.3.2 構建組合行爲

        8.3.3 F# 代碼的進一步演變

            8.3.3.1 C# 中的組合行爲

    8.4 組合數據和行爲

        8.4.1 決策樹(Decision trees)

        8.4.2 F# 決策樹

        8.4.3 C# 決策樹

            8.4.3.1 模板方法模式

            8.4.3.2 函數式實現

    8.5 第八章小結


    第三部分 F# 高級編程技術

    第九章 把值轉變成 F# 帶成員的對象類型

    9.1 改進以數據爲中心的應用程序

        9.1.1 添加成員到 F# 類型

        9.1.2 使用類型擴展追加成員

    9.2 改進以行爲爲中心的應用程序

        9.2.1 使用保存的函數記錄

        9.2.2 使用接口對象類型

    9.3 使用 .NET 接口

        9.3.1 使用 .NET 集合

        9.3.2 用 IDisposable 接口清理資源

            9.3.2.1 用關鍵字 use 編程

    9.4 具體的對象類型

        9.4.1 函數式和命令式類

        9.4.2 實現接口和類型轉換

            9.4.2.1 在 F# 中實現接口

            9.4.2.2 F# 中的向上轉換和向下轉換(UPCASTS AND DOWNCASTS)

    9.5 在 C# 中使用 F# 庫

        9.5.1 處理記錄和成員

        9.5.2 使用值和委託

    9.6 第九章小結

    第十章 數據結構的效率

    10.1 優化函數

        10.1.1避免尾遞歸的堆棧溢出

            10.1.1.1 使用累加器參數

        10.1.2 使用記憶化緩存結果

            10.1.2.1 C# 和 F# 中可重用的記憶化

    10.2 處理大集合

        10.2.1 用尾遞歸避免棧溢出(續!)

        10.2.2 高效處理列表

            10.2.2.1 添加元素到列表

        10.2.3 處理數組

            10.2.3.1 以函數方式使用數組

            10.2.3.2 在 C# 中以函數風格使用數組

    10.3 連續(continuations)

        10.3.1 樹處理的難點

        10.3.2 利用連續的代碼

            10.3.2.1 使用連續處理樹

    10.4 第十章小結

    第十一章 重構和測試函數式程序

    11.1 重構函數式程序

    11.1.1 重用常見的代碼塊

    11.1.2 跟蹤依賴性和副作用

    11.1.2.1 使用可變數據結構

    11.1.2.2 使用不可變數據結構

    11.2 測試函數式代碼

    11.2.1 從交互式控制檯到單元測試

    11.2.1.1 在 F# 交互環境中測試程序

    11.2.1.2 在 F# 中寫單元測試

    11.2.2 測試結構相等

    11.2.2.1 結構相等和比較

    11.2.2.2 測試列表

    強大的複製工具 Robocopy

    system 運行 cmd

    11.2.3 測試組合函數

    11.3 重構計算順序

    安裝 WIn8.1 創建用戶問題

    11.3.1 不同的計算策略

    11.3.1.1 C# 和 F# 中的提前計算

    11.3.1.2 Haskell 的延遲計算策略

    11.3.2計算策略的比較

    11.3.3 用函數模擬延遲計算

    11.3.4 F# 中的延遲值

    11.3.4.1 實現或和延遲或

    11.3.5 爲 C# 實現延遲值

    11.4 實用延遲值

    11.4.1 無窮列表

    11.4.2 在照片瀏覽器中緩存值

    11.4.2.1 使用延遲值進行緩存

    11.4.2.2 實現用戶界面

    11.5 第十五章小結

    第十二章 序列表達式和可選工作流

    12.1 生成序列

    12.1.1 使用高階函數

    12.1.2 在 C# 中使用迭代器

    12.1.3 使用 F# 序列表達式

    12.1.3.1 寫序列表達式

    12.1.3.2 組合序列表達式

    12.2 掌握序列表達式

    12.2.1 遞歸的序列表達式

    12.2.2 無窮序列

    12.3 處理序列

    找不到符號

    12.3.1 用迭代器轉換序列

    12.3.2 篩選和映射

    12.3.2.1 使用高階函數

    12.3.2.2 使用查詢和序列表達式

    12.3.3 平面映射(flattening projection)

    12.3.3.1 序列表達式中的平面映射

    12.3.3.2 直接使用平面映射

    12.3.3.3 在 C# 中使用平面映射

    把 Win 8.1 升級成 Windows 2012 R2

    12.4 可選工作流(alternative workflows)

    12.4.1 自定義查詢表達式

    12.4.2 自定義 F# 語言

    12.5 自定義計算的第一步

    12.5.1 聲明計算類型

    12.5.2 寫計算

    12.5.3 在 F# 中實現計算生成器

    12.5.4 在 C# 中實現查詢操作

    不急不躁修硬盤

    12.6 實現選項的計算表達式

    12.7 給計算增加日誌記錄

    12.7.1 創建日誌記錄計算

    12.7.2 創建日誌記錄計算

    12.7.3 使用計算表達式進行重構

    12.8 第十二章小結






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章