有用函数编程
《序》
感謝
關(guān)于本書
關(guān)于封面
第一部分 學習函數(shù)式思維
? 第一章 不同的思維
??? 1.1 什么是函數(shù)式編程?
????1.2 通往有用函數(shù)編程之路
??? 1.3 用函數(shù)式編程提高生產(chǎn)力
????????1.3.1 函數(shù)范式
? ? ????1.3.2 聲明式編程風格
?? ?????1.3.3 了解程序的執(zhí)行
?? ? ???1.3.4 設(shè)計并發(fā)友好的應用程序
?? ? ???1.3.5 函數(shù)風格怎樣形成代碼
??? 1.4 函數(shù)式編程演示樣例
? ??? ? 1.4.1 用聲明式風格表達意圖
? ??? ? ? ? 1.4.1.1 用 LINQ 處理數(shù)據(jù)
? ??? ? ? ? 1.4.1.2 用 XAML 描寫敘述用戶界面
? ??? ? ? ? 1.4.1.3 聲明式函數(shù)動畫
? ??? ? 1.4.2 理解使用不可變性的代碼
? ??? ? ? ?? 1.4.2.1 閱讀函數(shù)式程序
? ??? ? 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 到穩(wěn)健結(jié)束
? ? 1.6 小結(jié)
?? 第二章 函數(shù)編程的核心概念??? 2.1 函數(shù)編程的基礎(chǔ)
??? 2.2 函數(shù)程序的計算?????? 2.2.1 使用不可變值???????2.2.2 使用不可變數(shù)據(jù)結(jié)構(gòu)
???????2.2.3 用遞歸改變程序狀態(tài)
???????2.2.4 用表達式取代語句
???????2.2.5 計算 (Computation by calculation)
??? 2.3 編寫聲明式代碼
????? ? 2.3.1 函數(shù)也是值
????? ? 2.3.2 高階函數(shù)(Higher-order functions)
??? ? ?? ?? 2.3.2.1 使用高階函數(shù)擴展詞匯
??? ? ?? ?? 2.3.2.2 面向語言編程(Language-oriented programming)
? ? 2.4 函數(shù)式類型和值
?? ? ?? 2.4.1 C# 和 F# 中的類型判斷
? ? ??? 2.4.2 區(qū)別聯(lián)合類型(discriminated union type)
?? ???? 2.4.3 模式匹配(Pattern matching)
??????? 2.4.4 編譯時檢查程序
?? ? ?? ? ? 2.4.4.1 度量單位(UNITS OF MEASURE)
??? 2.5 第二章小結(jié)????第三章 F# 和 C# 中元組、列表和函數(shù)
? ??3.1 值和函數(shù)的聲明
? ? ? ??3.1.1 值的聲明和作用域
? ? ? ??3.1.2 函數(shù)的聲明
? ? ? ? ? ??3.1.2.1 函數(shù)簽名(FUNCTION SIGNATURES)
? ? ? ? ? ??3.1.2.2 嵌套函數(shù)聲明(NESTED FUNCTION DECLARATIONS)
? ? ? ??3.1.3 聲明可變值
????3.2 使用不可變數(shù)據(jù)結(jié)構(gòu)
? ? ? ??3.2.1元組類型(tuple)
? ? ? ? ? ??3.2.1.1 在 F# 中使用元組
? ? ? ? ? ??3.2.1.2 在 C# 中使用元組
? ? ? ??3.2.2 用 C# 實現(xiàn)元組類型
? ? ? ? ? ??3.2.2.1 更好地判斷 C# 元組類型
? ? ??? 3.2.3 計算元組
?? ? ?? 3.2.4 模式匹配元組
????3.3 列表和遞歸
? ?? ?? 3.3.1 遞歸計算
? ?? ?? 3.3.2 函數(shù)式列表
? ? ? ?? ?? 3.3.2.1 用模式匹配分解列表
? ?? ?? 3.3.3 C# 中的函數(shù)式列表
? ?? ?? 3.3.4 處理函數(shù)式列表
? ? ? ?? ?? 3.3.4.1 用 C# 求列表中數(shù)字的和
? ? ? ?? ?? 3.3.4.2用 F# 求列表中數(shù)字的和
????3.4 函數(shù)也是值
? ?? ?? 3.4.1 處理數(shù)字列表
? ? ? ?? ?? 3.4.1.1 在 C# 中傳遞函數(shù)作為參數(shù)值
? ? ? ?? ?? 3.4.1.2 在 F# 中傳遞函數(shù)作為參數(shù)值
? ?? ?? 3.4.2 參數(shù)化函數(shù)的優(yōu)點
????3.5 第三章小結(jié)
????第四章 通過演示樣例探索 F# 和 .NET 庫
????4.1 用 F# 繪制餅圖
????4.2 用 FSI 編寫和測試代碼
? ?? ?? 4.2.1 載入和解析數(shù)據(jù)
? ? ? ? 4.2.2 計算數(shù)據(jù)
????4.3 創(chuàng)建控制臺應用程序
????4.4 創(chuàng)建 Windows Forms 應用程序
? ?? ?? 4.4.1 創(chuàng)建用戶界面
? ?? ?? 4.4.2 繪制圖形
? ? ? ?? ?? 4.4.2.1 創(chuàng)建隨機顏色的畫筆
? ? ? ?? ?? 4.4.2.2 繪制餅圖部分
? ? ? ?? ?? 4.4.2.3 用函數(shù)畫圖
? ? ? ?? ?? 4.4.2.4 繪制整個圖表
? ? ? ?? ?? 4.4.2.5 加入文本標簽
? ?? ?? 4.4.3 創(chuàng)建 Windows 應用程序
????4.5 第四章小結(jié)
????
第二部分 函數(shù)技術(shù)的基礎(chǔ)
????第五章 局部使用函數(shù)值
????5.1 什么是值?
? ?? ?? 5.1.1 基本類型、值類型和對象
? ?? ?? 5.1.2 認識值和數(shù)據(jù)
????5.2 多值(Multiple values)
? ?? ?? 5.2.1 F# 和 C# 中的多值
? ? ? ?? ?? 5.2.1.1 用元組取代 out 參數(shù)
??????? 5.2.2 元組類型和值的構(gòu)造函數(shù)? ?? ?? 5.2.3 組合使用元組
? ? ? ?? ?? 5.2.3.1 避免復雜的元組
????5.3 可選值(Alternative values)
? ?? ?? 5.3.1 F# 中的區(qū)別聯(lián)合(discriminated unions)
? ?? ?? 5.3.2 使用可選值
? ? ? ?? ?? 5.3.2.1 用 F# 匹配區(qū)別聯(lián)合
? ? ? ?? ?? 5.3.2.2 用 C# 模擬區(qū)別聯(lián)合
? ?? ?? 5.3.3 加入類型還是函數(shù)
? ?? ?? 5.3.4 F# 中的選項(option)類型
? ? ? ?? ?? 5.3.4.1 實現(xiàn) F# 中簡單的選項類型
????5.4 泛型值(Generic values)
? ?? ?? 5.4.1 在 C# 中實現(xiàn)選項類型
? ?? ?? 5.4.2 F# 中的泛型選項類型
? ?? ?? 5.4.3 值的類型判斷
? ? ? ?? ?? 5.4.3.1 C# 3.0 中的類型判斷
? ? ? ?? ?? 5.4.3.2 F# 中的類型判斷
? ?? ?? 5.4.4 寫泛型函數(shù)
??? 5.5 函數(shù)值? ?? ?? 5.5.1 Lambda 函數(shù)
? ? ? ?? ?? 5.5.1.1 類型批注、動作和語句塊(TYPE ANNOTATIONS, ACTIONS, AND STATEMENT BLOCKS)
? ?? ?? 5.5.2 函數(shù)類型
? ? ? ?? ?? 5.5.2.1 函數(shù)作為參數(shù)值和返回值
? ?? ?? 5.5.3 多參數(shù)函數(shù)
? ? ? ?? ?? 5.5.3.1 散函數(shù)應用(PARTIAL FUNCTION APPLICATION)
??? 5.6 第五章小結(jié)
??? 第六章 使用高階函數(shù)處理值
????6.1 泛型高階函數(shù)
? ?? ?? 6.1.1 F# 中的泛型函數(shù)
? ?? ?? 6.1.2 自己定義運算符
? ? ? ?? ?? 6.1.2.1 在 C# 中模擬自己定義運算符
? ? ? ? ?? 6.1.2.2 F# 的管道運算符
????6.2 處理元組
? ?? ?? 6.2.1 使用函數(shù)處理元組
? ?? ?? 6.2.2 C# 中處理元組的方法
??? 6.3 處理計劃
? ?? ?? 6.3.1 處理計劃列表
? ?? ?? 6.3.2 在 C# 中處理計劃
????6.4 處理選項類型
? ?? ?? 6.4.1 使用 map 函數(shù)
? ?? ?? 6.4.2 使用 bind 函數(shù)
? ?? ?? 6.4.3 分步分析(Evaluating)演示樣例? ?? ?? 6.4.4 實現(xiàn)選項類型的操作
? ? ? ? ?? 6.4.4.1 在 C#中使用選項類型
????6.5 使用函數(shù)
? ?? ?? 6.5.1 函數(shù)組合
? ?? ?? 6.5.2 C# 中的函數(shù)組合
????6.6 類型判斷
? ?? ?? 6.6.1 F# 中函數(shù)調(diào)用的類型判斷
? ? ? ? 6.6.2 自己主動泛型化(automatic generalization)
????6.7 處理列表
? ?? ?? 6.7.1 用F# 實現(xiàn)列表
? ?? ?? 6.7.2 理解列表函數(shù)的類型簽名
? ? ? ?? ?? 6.7.2.1 處理列表
? ?? ?? 6.7.3 實現(xiàn)列表函數(shù)
? ? ? ?? ?? 6.7.3.1 在 C# 中實現(xiàn) fold
????6.8 通用處理語言
? ?? ?? 6.8.1 映射、篩選和折疊(Mapping, filtering, and folding)
? ?? ?? 6.8.2 列表的綁定操作
????6.9 第六章小結(jié)
????第七章 以數(shù)據(jù)為中心的程序設(shè)計
????7.1 函數(shù)式數(shù)據(jù)結(jié)構(gòu)
? ? ? ??7.1.1 使用 F# 記錄類型
? ? ? ? ? ??7.1.1.1 處理記錄
? ? ? ??7.1.2 C# 中的函數(shù)式數(shù)據(jù)結(jié)構(gòu)
????7.2 平面文檔的表示
? ? ? ??7.2.1 繪制元素
? ? ? ??7.2.2 在窗口上顯示畫圖
????7.3 表示結(jié)構(gòu)化文檔
? ? ? ??7.3.1 轉(zhuǎn)換表示
? ? ? ??7.3.2 用 XML 表示文檔
????7.4 寫操作
? ? ? ??7.4.1 用映射操作進行更新
? ? ? ??7.4.2 使用聚合操作進行計算
????7.5 面向?qū)ο蟮谋硎痉椒?/p>
? ? ? ??7.5.1 用結(jié)構(gòu)模式表示數(shù)據(jù)
? ? ? ? ? ??7.5.1.1復合設(shè)計模式(THE COMPOSITE DESIGN PATTERN)
? ? ? ? ? ??7.5.1.2 裝飾設(shè)計模式(THE DECORATOR DESIGN PATTERN)
????第八章 以行為為中心的程序設(shè)計
????8.1 使用行為集合
? ? ? ??8.1.1 把行為表示為對象
? ? ? ??8.1.2 在 C# 中把行為表示成函數(shù)
? ? ? ??8.1.3 在 C# 中使用函數(shù)集合
? ? ? ??8.1.4 在 F# 中使用函數(shù)列表
????8.2 用于處理函數(shù)的習慣用語
? ? ? ??8.2.1 策略設(shè)計模式(The strategy design pattern)
? ? ? ??8.2.2 命令設(shè)計模式(The command design pattern)
? ? ? ? ? ??8.2.2.1 在 C# 中使用命令模式捕獲狀態(tài)
? ? ? ??8.2.3 在 F# 使用閉包捕獲狀態(tài)
? ? ? ? ? ??8.2.3.1 可變狀態(tài)使用引用單元
? ? ? ? ? ??8.2.3.2 在閉包中捕捉引用單元
????8.3 使用組合行為
? ? ? ??8.3.1 函數(shù)的記錄
? ? ? ??8.3.2 構(gòu)建組合行為
? ? ? ??8.3.3 F# 代碼的進一步演變
? ? ? ? ? ??8.3.3.1 C# 中的組合行為
????8.4 組合數(shù)據(jù)和行為
? ? ? ??8.4.1 決策樹(Decision trees)
? ? ? ??8.4.2 F# 決策樹
? ? ? ??8.4.3 C# 決策樹
? ? ? ? ? ??8.4.3.1 模板方法模式
? ? ? ? ? ??8.4.3.2 函數(shù)式實現(xiàn)
????8.5 第八章小結(jié)
? ??第三部分 F# 高級編程技術(shù)
????第九章 把值轉(zhuǎn)變成 F# 帶成員的對象類型
????9.1 改進以數(shù)據(jù)為中心的應用程序
? ?? ?? 9.1.1 加入成員到 F# 類型
? ?? ?? 9.1.2 使用類型擴展追加成員
????9.2 改進以行為為中心的應用程序
? ?? ?? 9.2.1 使用保存的函數(shù)記錄
? ?? ?? 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 函數(shù)式和命令式類
? ?? ?? 9.4.2 實現(xiàn)接口和類型轉(zhuǎn)換
? ? ? ?? ?? 9.4.2.1 在 F# 中實現(xiàn)接口
? ? ? ?? ?? 9.4.2.2 F# 中的向上轉(zhuǎn)換和向下轉(zhuǎn)換(UPCASTS AND DOWNCASTS)
????9.5 在 C# 中使用 F# 庫
? ?? ?? 9.5.1 處理記錄和成員
? ?? ?? 9.5.2 使用值和托付
????9.6 第九章小結(jié)
????第十章 數(shù)據(jù)結(jié)構(gòu)的效率
????10.1 優(yōu)化函數(shù)
? ?? ?? 10.1.1避免尾遞歸的堆棧溢出
? ? ? ?? ?? 10.1.1.1 使用累加器參數(shù)
? ?? ?? 10.1.2 使用記憶化緩存結(jié)果
? ? ? ?? ?? 10.1.2.1 C# 和 F# 中可重用的記憶化
????10.2 處理大集合
? ?? ?? 10.2.1 用尾遞歸避免棧溢出(續(xù)!)
? ?? ?? 10.2.2 高效處理列表
? ? ? ? ? ? 10.2.2.1 加入元素到列表
? ?? ?? 10.2.3 處理數(shù)組
? ? ? ?? ?? 10.2.3.1 以函數(shù)方式使用數(shù)組
? ? ? ?? ?? 10.2.3.2 在 C# 中以函數(shù)風格使用數(shù)組
????10.3 連續(xù)(continuations)
? ?? ?? 10.3.1 樹處理的難點
? ?? ?? 10.3.2 利用連續(xù)的代碼
? ? ? ?? ?? 10.3.2.1 使用連續(xù)處理樹
????10.4 第十章小結(jié)
????第十一章 重構(gòu)和測試函數(shù)式程序
????11.1 重構(gòu)函數(shù)式程序
????11.1.1 重用常見的代碼塊
????11.1.2 跟蹤依賴性和副作用
????11.1.2.1 使用可變數(shù)據(jù)結(jié)構(gòu)
????11.1.2.2 使用不可變數(shù)據(jù)結(jié)構(gòu)
????11.2 測試函數(shù)式代碼
????11.2.1 從交互式控制臺到單元測試
????11.2.1.1 在 F# 交互環(huán)境中測試程序
????11.2.1.2 在 F# 中寫單元測試
????11.2.2 測試結(jié)構(gòu)相等
????11.2.2.1 結(jié)構(gòu)相等和比較
????11.2.2.2 測試列表
????強大的復制工具 Robocopy
????system 執(zhí)行 cmd
????11.2.3 測試組合函數(shù)
????11.3 重構(gòu)計算順序
????安裝 WIn8.1 創(chuàng)建用戶問題
????11.3.1 不同的計算策略
????11.3.1.1 C# 和 F# 中的提前計算
????11.3.1.2 Haskell 的延遲計算策略
????11.3.2計算策略的比較
????11.3.3 用函數(shù)模擬延遲計算
????11.3.4 F# 中的延遲值
????11.3.4.1 實現(xiàn)或和延遲或
????11.3.5 為 C# 實現(xiàn)延遲值
????11.4 有用延遲值
????11.4.1 無窮列表
????11.4.2 在照片瀏覽器中緩存值
????11.4.2.1 使用延遲值進行緩存
????11.4.2.2 實現(xiàn)用戶界面
????11.5 第十五章小結(jié)
????第十二章 序列表達式和可選工作流
????12.1 生成序列
????12.1.1 使用高階函數(shù)
????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 用迭代器轉(zhuǎn)換序列
????12.3.2 篩選和映射
????12.3.2.1 使用高階函數(shù)
????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# 中實現(xiàn)計算生成器
????12.5.4 在 C# 中實現(xiàn)查詢操作
????不急不躁修硬盤
????12.6 實現(xiàn)選項的計算表達式
????12.7 給計算添加日志記錄
????12.7.1 創(chuàng)建日志記錄計算
????12.7.2 創(chuàng)建日志記錄計算
????12.7.3 使用計算表達式進行重構(gòu)
????12.8 第十二章小結(jié)
轉(zhuǎn)載于:https://www.cnblogs.com/yangykaifa/p/6880177.html
總結(jié)