目錄
譯者序
緻謝
前言
關於本書
關於作者
第1章函數式編程簡介
1.1什麼是函數式編程?
1.1.1與麵嚮對象編程的關係
1.1.2命令式與聲明式編程的比較
1.2純函數(Pure functions)
1.2.1避免可變狀態
1.3以函數方式思考問題·
1.4函數式編程的優點
1.4.1 代碼簡潔易讀
1. .4.2並發和同步
1.4.3持續優化
1.5 C++作為函數式編程語言的進化
1.6將會學到什麼
總結
第2章函數式編程之旅
2.1函數使用函數?
2.2STL實例
2.2.1求平均值
2.2.2摺疊(Folding)
2.2.3刪除字符串空白符
2.2.4基於謂詞分割集閤
2.2.5過濾(Filtering) 和轉換(Transforming)
2.3 STL算法的可組閤性
2.4編寫自己的高階函數
2.4.1接收函數作為參數
2.4.2用循環實現
2.4.3遞歸(Recursion) 和尾調用優化(Tail-call optimization)
2.4.4使用摺疊實現
總結
第3章函數對象
3.1函數和函數對象
3.1.1自動推斷返迴值類型
3.1.2函數指針
3.1.3調用操作符重載
3.1.4創建通用函數對象
3.2 lambda和閉包(Closure)
3.2.1 lambda語法
3.2.2 lambda詳解
3.2.3在lambda中創建任意成員變量
3.2.4通用lambda錶達式
3.3編寫比lambda更簡潔的函數對象
3.3.1 STL中的操作符函數對象
3.3.2其他庫中的操作符函數對象
3.4用stl::function包裝函數對象
總結.
第4章以舊函數創建新函數
4.1偏函數應用
4.1.1把二元函數轉換成一元函數的通用方法
4.1.2使用std::bind綁定值到特定的函數參數
4.1.3二元函數參數的反轉
4.1.4對多參數函數使用std::bind
4.1.5使用lambda替代stl::bind
4.2柯裏化(Currying) :看待函數不同的方式
4.2.1創建柯裏化函數的簡單方法
4.2.2數據庫訪問柯裏化
4.2.3柯裏化與偏函數應用.
4.3函數組閤
4.4函數提升(復習)
4.4.1鍵值對列錶反轉
.總結
第5章純潔性:避免可變狀態
5.1可變狀態帶來的問題
5.2純函數和弓|用透明
5.3無副作用編程
5.4並發環境中的可變狀態與不可變狀態
5.5 const的重要性
5.5.1邏輯const與內部const
5.5.2對於臨時值優化成員函數
5.5.3 const的缺陷
.總結
第6章惰性求值
6.1 C++的惰性
6.2惰性作為一種優化技術
6.2.1集閤惰性排序
6.2.2用戶接口中的列錶視圖
6.2.3通過緩存函數結果修剪遞歸樹
6.2.4動態編程作為惰性形式
6.3通用記憶化(Generalized memoization)
6.4錶達式模闆與惰性字符串拼接
6.4.1純潔性與錶達式模闆
總結
第7章range
7.1 range簡介
7.2創建數據的隻讀視圖
7.2.1 range的filter 函數
7.2.2 range的transform函數
7.2.3 range惰性求值
7.3修改range中的值
7.4定界rang和無限range
7.4.1用定界range優化用於輸入的range
7.4.2用哨兵創建無限range
7.5用range統計詞頻
.總結
第8章函數式數據結構
8.1不可變鏈錶(Immutable linked lists)
8.1.1在錶頭添加和刪除元素
8.1.2在鏈錶末尾添加和刪除元素
8.1.3在鏈錶中間添加和刪除元素
8.1.4內存管理
8.2不可變類嚮量結構
8.2.1位圖嚮量樹中的元素查找
8.2.2嚮位圖嚮量樹追加元素
8.2.3位圖嚮量樹的修改
8.2.4在位圖嚮量樹的末尾刪除元素
8.2.5其他操作和位圖嚮量樹的整體效率
總結
第9章代數數據類型及模式匹配
9.1代數數據類型
9.1.1通過繼承實現和類型
9.1.2通過union和std:variant實現和類型
9.1.3特定狀態的實現
9.1.4特殊的和類型: Optional
9.1.5和類型用於錯誤處理
9.2使用代數數據類型進行域建模
9.2.1原始的方法及其缺點
9.2.2更復雜的方法:自. 上而下的設計
9.3使用模式匹配更好地處理代數數據類型
9.4 Mach7的強大匹配功能
總結
第10章monad
10.1仿函數並不是以前的仿函數
10.1.1處理可選值
10.2 monad:更強大的仿函數
10.3基本的例子
10.4 range與monad的嵌套使用
10.5錯誤處理
10.5.1 stl::optional<T>作為monad
10.5.2 expected<T, E>作為monad
10.5.3 try monad
10.6 monad狀態處理
10.7並發和延續monad
10.7.1 future 作為monad
10.7.2 future的實現
10.8 monad組閤
總結
第11章模闆元編程
11.1編譯時操作類型
11.1.1推斷類型調試
11.1.2編譯時的模式匹配
11.1.3提供類型的元信息
11.2編譯時檢查類型的屬性
11.3構造科裏化函數
11.3.1調用所有可調用的
11.4 DSL構建塊
總結
第12章並發係統的函數式設計
12.1 Actor模型:組件思想
12.2創建簡單的消息源
12.3將反應流建模為monad
12.3.1創建宿(Sink) 接收消息
12.3.2轉換反應流
12.3.3創建給定值的流
12.3.4連接流
12.4過濾反應流
12.5反應流的錯誤處理
12.6響應客戶端
12.7創建狀態可修改的Actor
12.8用Actor編寫分布式係統
總結
第13章測試與調試
13.1程序編譯正確嗎?
13.2單元測試與純函數
13.3自動産生測試
13.3.1産生測試用例
13.3.2基於規則的測試
13.3.3比較測試
13.4測試基於monad的並發係統
總結
· · · · · · (
收起)