有用函数编程
《序》
感謝
關于本書
關于封面
第一部分 學習函數式思維
? 第一章 不同的思維
??? 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 用keyword 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 第十二章小結
轉載于:https://www.cnblogs.com/yangykaifa/p/6880177.html
總結