編輯推薦
動手實踐書中想象力豐富、略有點兒瘋狂的示例,你將能夠:揮舞純函數式編程技法,笑看各種“副作用”。施展Haskell的“惰性”魔法,處理無限數據集。通過自定義類型、類型類和模塊來組織程序。使用Haskell優雅的輸入/輸齣係統與外部世界分享程序的靈魂。學習Haskell這門強大的語言,再沒有比閱讀這本書更好的方法瞭!
內容簡介
《新銳編程語言集萃:Haskell趣學指南》是一本講解Haskell這門函數式編程語言的入門指南,語言通俗易懂,插圖生動幽默,示例短小清晰,結構安排閤理。書中從Haskell的基礎知識講起,涵蓋瞭所有的基本概念和語法,內容涉及基本語法、遞歸、類型和類型類、函子、applicative 函子、monad、zipper及所有Haskell重要特性和強大功能。
《新銳編程語言集萃:Haskell趣學指南》適閤對函數式編程及Haskell語言感興趣的開發人員閱讀。
作者簡介
作者介紹
Miran Lipova?a 斯洛文尼亞共和國盧布爾雅那城的一位計算機科學專業的學生。除瞭對Haskell的狂熱,他還喜歡拳擊,玩低音吉他,當然還有畫畫。
譯者介紹
李亞舟 畢業於山東理工大學,現就職於IBM LTC,從事Linux發行版相關工作。對內核、體係結構、編程語言及技術翻譯有濃厚興趣,敬仰那些孜孜不倦地精益求精的人們。
宋方睿 本科生,清華大學開源鏡像站維護者,blue-lotus戰隊成員,熱愛算法和程序設計語言理論,關注高性能計算、自然語言處理及前端技術。個人博客http://maskray.me。
內頁插圖
目錄
第1章 各就各位,預備!
1.1 調用函數
1.2 小朋友的第一個函數
1.3 列錶入門
1.3.1 拼接列錶
1.3.2 訪問列錶中的元素
1.3.3 嵌套列錶
1.3.4 比較列錶
1.3.5 更多列錶操作
1.4 得州區間
1.5 我是列錶推導式
1.6 元組
1.6.1 使用元組
1.6.2 使用序對
1.6.3 找直角三角形
第2章 相信類型
2.1 顯式類型聲明
2.2 Haskell的常見類型
2.3 類型變量
2.4 類型類入門
2.4.1 Eq類型類
2.4.2 Ord類型類
2.4.3 Show類型類
2.4.4 Read類型類
2.4.5 Enum類型類
2.4.6 Bounded類型類
2.4.7 Num類型類
2.4.8 Floating類型類
2.4.9 Integeral類型類
2.4.10 有關類型類的最後總結
第3章 函數的語法
3.1 模式匹配
3.1.1 元組的模式匹配
3.1.2 列錶與列錶推導式的模式匹配
3.1.3 As模式
3.2 注意,哨衛!
3.3 where?!
3.3.1 where的作用域
3.3.2 where中的模式匹配
3.3.3 where塊中的函數
3.4 let
3.4.1 列錶推導式中的let
3.4.2 GHCi中的let
3.5 case錶達式
第4章 你好,遞歸
4.1 不可思議的最大值
4.2 更多的幾個遞歸函數
4.2.1 replicate
4.2.2 take
4.2.3 reverse
4.2.4 repeat
4.2.5 zip
4.2.6 elem
4.3 快點,排序!
4.3.1 算法思路
4.3.2 編寫代碼
4.4 遞歸地思考
第5章 高階函數
5.1 柯裏函數
5.1.1 截斷
5.1.2 打印函數
5.2 再來點兒高階函數
5.2.1 實現zipWith
5.2.2 實現flip
5.3 函數式程序員工具箱
5.3.1 map函數
5.3.2 filter函數
5.3.3 有關map與filter的更多示例
5.3.4 映射帶有多個參數的函數
5.4 lambda
5.5 摺疊紙鶴
5.5.1 通過foldl進行左摺疊
5.5.2 通過foldr進行右摺疊
5.5.3 foldl1函數與foldr1函數
5.5.4 摺疊的幾個例子
5.5.5 另一個角度看摺疊
5.5.6 無限列錶的摺疊
5.5.7 掃描
5.6 有$的函數應用
5.7 函數組閤
5.7.1 帶有多個參數函數的組閤
5.7.2 Point-Free風格
第6章 模塊
6.1 導入模塊
6.2 使用模塊中的函數求解問題
6.2.1 統計單詞數
6.2.2 乾草堆中的縫紉針
6.2.3 凱撒密碼沙拉
6.2.4 嚴格左摺疊
6.2.5 尋找酷數
6.3 映射鍵與值
6.3.1 幾乎一樣好:關聯列錶
6.3.2 進入Data.Map
6.4 構造自己的模塊
6.4.1 幾何模塊
6.4.2 模塊的層次結構
第7章 構造我們自己的類型和類型類
7.1 定義新的數據類型
7.2 成型
7.2.1 藉助Point數據類型優化Shape數據類型
7.2.2 將圖形導齣到模塊中
7.3 記錄語法
7.4 類型參數
7.4.1 要不要參數化我們的汽車?
7.4.2 末日嚮量
7.5 派生實例
7.5.1 相同的人
7.5.2 告訴我怎麼讀
7.5.3 法庭內保持秩序!
7.5.4 一周的一天
7.6 類型彆名
7.6.1 使我們的電話本更好看些
7.6.2 參數化類型彆名
7.6.3 嚮左走,嚮右走
7.7 遞歸數據結構
7.7.1 優化我們的列錶
7.7.2 種一棵樹
7.8 類型類
7.8.1 深入Eq類型類
7.8.2 TrafficLight數據類型
7.8.3 子類化
7.8.4 作為類型類實例的帶參數類型
7.9 Yes-No類型類
7.10 Functor類型類
7.10.1 Maybe函子
7.10.2 樹也是函子
7.10.3 Either a函子
7.11 kind與無名類型
第8章 輸入與輸齣
8.1 純粹與非純粹的分離
8.2 Hello, World!
8.3 組閤I/O操作
8.3.1 在I/O操作中使用let
8.3.2 反過來
8.4 幾個實用的I/O函數
8.4.1 putStr
8.4.2 putChar
8.4.3 print
8.4.4 when
8.4.5 sequence
8.4.6 mapM
8.4.7 forever
8.4.8 forM
8.5 I/O操作迴顧
第9章 更多的輸入輸齣操作
9.1 文件和流
9.1.1 輸入重定嚮
9.1.2 從輸入流獲取字符串
9.1.3 轉換輸入
9.2 讀寫文件
9.2.1 使用withFile函數
9.2.2 bracket的時間到瞭
9.2.3 抓住句柄
9.3 TODO列錶
9.3.1 刪除條目
9.3.2 清理
9.4 命令行參數
9.5 關於TODO列錶的更多有趣的事
9.5.1 一個多任務列錶
9.5.2 處理錯誤的輸入
9.6 隨機性
9.6.1 擲硬幣
9.6.2 更多隨機函數
9.6.3 隨機性和I/O
9.7 字節串
9.7.1 嚴格的和惰性字節串
9.7.2 用字節串復製文件
第10章 函數式地解決問題
10.1 逆波蘭式計算器
10.1.1 計算RPN錶達式
10.1.2 寫一個RPN函數
10.1.3 添加更多的操作符
10.2 從希思羅機場到倫敦
10.2.1 計算最快的路綫
10.2.2 在Haskell中錶示道路係統
10.2.3 實現計算最佳路徑的函數
10.2.4 從輸入獲取道路係統
第11章 applicative函子
11.1 函子再現
11.1.1 作為函子的I/O操作
11.1.2 作為函子的函數
11.2 函子定律
11.2.1 定律1
11.2.2 定律2
11.2.3 違反定律
11.3 使用applicative函子
11.3.1 嚮applicative問好
11.3.2 Maybe applicative函子
11.3.3 applicative風格
11.3.4 列錶
11.3.5 IO也是applicative函子
11.3.6 函數作為applicative
11.3.7 zip列錶
11.3.8 applicative定律
11.4 applicative的實用函數
第12章 Monoid
12.1 把現有類型包裹成新類型
12.1.1 用newtype創建類型類的實例
12.1.2 關於newtype的惰性
12.1.3 type、newtype和data三者的對比
12.2 關於那些monoid
12.2.1 Monoid類型類
12.2.2 monoid定律
12.3 認識一些monoid
12.3.1 列錶是monoid
12.3.2 Product和Sum
12.3.3 Any和All
12.3.4 Ordering monoid
12.3.5 Maybe monoid
12.4 monoid的摺疊
第13章 更多monad的例子
13.1 升級我們的applicative函子
13.2 體會Maybe
13.3 Monad類型類
13.4 一往無前
13.4.1 代碼,代碼,代碼
13.4.2 我要飛走
13.4.3 綫上的香蕉
13.5 do記法
13.5.1 按我所說的去做
13.5.2 我皮埃爾又迴來瞭
13.5.3 模式匹配和計算失敗
13.6 列錶monad
13.6.1 do記法和列錶推導式
13.6.2 MonadPlus和guard函數
13.6.3 馬的探索
13.7 monad定律
13.7.1 左單位元
13.7.2 右單位元
13.7.3 結閤律
第14章 再多一些monad
14.1 Writer?我沒聽說過啊!
14.1.1 monad趕來營救
14.1.2 Writer類型
14.1.3 對Writer使用do記法
14.1.4 給程序添加日誌
14.1.5 低效的列錶構造
14.1.6 使用差分列錶
14.1.7 比較性能
14.2 Reader?呃,不開玩笑瞭
14.2.1 作為monad的函數
14.2.2 Reader monad
14.3 帶狀態計算的優雅錶示
14.3.1 帶狀態的計算
14.3.2 棧和石頭
14.3.3 State monad
14.3.4 獲取和設置狀態
14.3.5 隨機性和State monad
14.4 牆上的Error
14.5 一些實用的monad式的函數
14.5.1 liftM和它的朋友們
14.5.2 join函數
14.5.3 filterM
14.5.4 foldM
14.6 創建一個安全的RPN計算器
14.7 組閤monad式的函數
14.8 創建monad
第15章 zipper
15.1 在樹上移動
15.1.1 麵包屑
15.1.2 嚮上走
15.1.3 處理焦點處的樹
15.1.4 一路走到頂端,那裏的空氣既新鮮又乾淨
15.2 在列錶上定位
15.3 一個非常簡單的文件係統
15.3.1 為文件係統創建一個zipper
15.3.2 操作文件係統
15.4 小心行事
15.5 謝謝閱讀!
前言/序言
新銳編程語言集萃:Haskell趣學指南 下載 mobi epub pdf txt 電子書