Haskell趣學(xué)指南 版權(quán)信息
- ISBN:9787115335593
- 條形碼:9787115335593 ; 978-7-115-33559-3
- 裝幀:一般膠版紙
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>>
Haskell趣學(xué)指南 本書特色
動手實踐書中想象力豐富、略有點兒瘋狂的示例,你將能夠:揮舞純函數(shù)式編程技法,笑看各種“副作用”。施展Haskell的“惰性”魔法,處理無限數(shù)據(jù)集。通過自定義類型、類型類和模塊來組織程序。使用Haskell優(yōu)雅的輸入/輸出系統(tǒng)與外部世界分享程序的靈魂。學(xué)習Haskell這門強大的語言,再沒有比閱讀這本書更好的方法了!
Haskell趣學(xué)指南 內(nèi)容簡介
《Haskell趣學(xué)指南》是一本講解Haskell這門函數(shù)式編程語言的入門指南,語言通俗易懂,插圖生動幽默,示例短小清晰,結(jié)構(gòu)安排合理。書中從Haskell的基礎(chǔ)知識講起,涵蓋了所有的基本概念和語法,內(nèi)容涉及基本語法、遞歸、類型和類型類、函子、applicative 函子、monad、zipper及所有Haskell重要特性和強大功能。
《Haskell趣學(xué)指南》適合對函數(shù)式編程及Haskell語言感興趣的開發(fā)人員閱讀。
Haskell趣學(xué)指南 目錄
第1章 各就各位,預(yù)備! 11.1 調(diào)用函數(shù) 31.2 小朋友的**個函數(shù) 41.3 列表入門 61.3.1 拼接列表 61.3.2 訪問列表中的元素 81.3.3 嵌套列表 81.3.4 比較列表 81.3.5 更多列表操作 91.4 得州區(qū)間 111.5 我是列表推導(dǎo)式 131.6 元組 161.6.1 使用元組 161.6.2 使用序?qū)Α?71.6.3 找直角三角形 18第2章 相信類型 202.1 顯式類型聲明 202.2 Haskell的常見類型 212.3 類型變量 222.4 類型類入門 232.4.1 Eq類型類 242.4.2 Ord類型類 242.4.3 Show類型類 252.4.4 Read類型類 252.4.5 Enum類型類 272.4.6 Bounded類型類 272.4.7 Num類型類 282.4.8 Floating類型類 282.4.9 Integeral類型類 282.4.10 有關(guān)類型類的*后總結(jié) 29第3章 函數(shù)的語法 303.1 模式匹配 303.1.1 元組的模式匹配 323.1.2 列表與列表推導(dǎo)式的模式匹配 323.1.3 As模式 343.2 注意,哨衛(wèi)! 343.3 where?! 363.3.1 where的作用域 373.3.2 where中的模式匹配 383.3.3 where塊中的函數(shù) 383.4 let 393.4.1 列表推導(dǎo)式中的let 403.4.2 GHCi中的let 403.5 case表達式 41第4章 你好,遞歸 434.1 不可思議的*大值 434.2 更多的幾個遞歸函數(shù) 454.2.1 replicate 454.2.2 take 454.2.3 reverse 464.2.4 repeat 464.2.5 zip 464.2.6 elem 474.3 快點,排序! 474.3.1 算法思路 474.3.2 編寫代碼 484.4 遞歸地思考 49第5章 高階函數(shù) 505.1 柯里函數(shù) 505.1.1 截斷 525.1.2 打印函數(shù) 535.2 再來點兒高階函數(shù) 535.2.1 實現(xiàn)zipWith 545.2.2 實現(xiàn)flip 555.3 函數(shù)式程序員工具箱 565.3.1 map函數(shù) 565.3.2 filter函數(shù) 575.3.3 有關(guān)map與filter的更多示例 585.3.4 映射帶有多個參數(shù)的函數(shù) 605.4 lambda 605.5 折疊紙鶴 625.5.1 通過foldl進行左折疊 635.5.2 通過foldr進行右折疊 635.5.3 foldl1函數(shù)與foldr1函數(shù) 645.5.4 折疊的幾個例子 655.5.5 另一個角度看折疊 665.5.6 無限列表的折疊 675.5.7 掃描 685.6 有$的函數(shù)應(yīng)用 685.7 函數(shù)組合 705.7.1 帶有多個參數(shù)函數(shù)的組合 705.7.2 Point-Free風格 71第6章 模塊 736.1 導(dǎo)入模塊 736.2 使用模塊中的函數(shù)求解問題 756.2.1 統(tǒng)計單詞數(shù) 756.2.2 干草堆中的縫紉針 766.2.3 凱撒密碼沙拉 776.2.4 嚴格左折疊 796.2.5 尋找酷數(shù) 806.3 映射鍵與值 826.3.1 幾乎一樣好:關(guān)聯(lián)列表 826.3.2 進入Data.Map 836.4 構(gòu)造自己的模塊 876.4.1 幾何模塊 876.4.2 模塊的層次結(jié)構(gòu) 89第7章 構(gòu)造我們自己的類型和類型類 917.1 定義新的數(shù)據(jù)類型 917.2 成型 927.2.1 借助Point數(shù)據(jù)類型優(yōu)化Shape數(shù)據(jù)類型 937.2.2 將圖形導(dǎo)出到模塊中 947.3 記錄語法 957.4 類型參數(shù) 977.4.1 要不要參數(shù)化我們的汽車? 997.4.2 末日向量 1007.5 派生實例 1027.5.1 相同的人 1027.5.2 告訴我怎么讀 1037.5.3 法庭內(nèi)保持秩序! 1047.5.4 一周的一天 1057.6 類型別名 1067.6.1 使我們的電話本更好看些 1077.6.2 參數(shù)化類型別名 1087.6.3 向左走,向右走 1097.7 遞歸數(shù)據(jù)結(jié)構(gòu) 1117.7.1 優(yōu)化我們的列表 1117.7.2 種一棵樹 1137.8 類型類 1157.8.1 深入Eq類型類 1167.8.2 TrafficLight數(shù)據(jù)類型 1167.8.3 子類化 1187.8.4 作為類型類實例的帶參數(shù)類型 1187.9 Yes-No類型類 1207.10 Functor類型類 1227.10.1 Maybe函子 1247.10.2 樹也是函子 1247.10.3 Either a函子 1257.11 kind與無名類型 126第8章 輸入與輸出 1288.1 純粹與非純粹的分離 1288.2 Hello, World! 1298.3 組合I/O操作 1308.3.1 在I/O操作中使用let 1328.3.2 反過來 1338.4 幾個實用的I/O函數(shù) 1358.4.1 putStr 1358.4.2 putChar 1358.4.3 print 1368.4.4 when 1378.4.5 sequence 1378.4.6 mapM 1388.4.7 forever 1398.4.8 forM 1398.5 I/O操作回顧 140第9章 更多的輸入輸出操作 1419.1 文件和流 1419.1.1 輸入重定向 1419.1.2 從輸入流獲取字符串 1429.1.3 轉(zhuǎn)換輸入 1449.2 讀寫文件 1469.2.1 使用withFile函數(shù) 1479.2.2 bracket的時間到了 1489.2.3 抓住句柄 1499.3 TODO列表 1499.3.1 刪除條目 1509.3.2 清理 1529.4 命令行參數(shù) 1539.5 關(guān)于TODO列表的更多有趣的事 1549.5.1 一個多任務(wù)列表 1559.5.2 處理錯誤的輸入 1589.6 隨機性 1599.6.1 擲硬幣 1609.6.2 更多隨機函數(shù) 1619.6.3 隨機性和I/O 1629.7 字節(jié)串 1659.7.1 嚴格的和惰性字節(jié)串 1669.7.2 用字節(jié)串復(fù)制文件 167第10章 函數(shù)式地解決問題 16910.1 逆波蘭式計算器 16910.1.1 計算RPN表達式 16910.1.2 寫一個RPN函數(shù) 17010.1.3 添加更多的操作符 17210.2 從希思羅機場到倫敦 17310.2.1 計算*快的路線 17410.2.2 在Haskell中表示道路系統(tǒng) 17610.2.3 實現(xiàn)計算*佳路徑的函數(shù) 17710.2.4 從輸入獲取道路系統(tǒng) 179第11章 applicative函子 18211.1 函子再現(xiàn) 18211.1.1 作為函子的I/O操作 18311.1.2 作為函子的函數(shù) 18511.2 函子定律 18711.2.1 定律1 18811.2.2 定律2 18811.2.3 違反定律 18911.3 使用applicative函子 19111.3.1 向applicative問好 19211.3.2 Maybe applicative函子 19211.3.3 applicative風格 19311.3.4 列表 19511.3.5 IO也是applicative函子 19711.3.6 函數(shù)作為applicative 19811.3.7 zip列表 19911.3.8 applicative定律 20011.4 applicative的實用函數(shù) 201第12章 Monoid 20512.1 把現(xiàn)有類型包裹成新類型 20512.1.1 用newtype創(chuàng)建類型類的實例 20712.1.2 關(guān)于newtype的惰性 20812.1.3 type、newtype和data三者的對比 21012.2 關(guān)于那些monoid 21112.2.1 Monoid類型類 21212.2.2 monoid定律 21312.3 認識一些monoid 21312.3.1 列表是monoid 21312.3.2 Product和Sum 21412.3.3 Any和All 21612.3.4 Ordering monoid 21712.3.5 Maybe monoid 21912.4 monoid的折疊 221第13章 更多monad的例子 22413.1 升級我們的applicative函子 22413.2 體會Maybe 22513.3 Monad類型類 22813.4 一往無前 22913.4.1 代碼,代碼,代碼 23013.4.2 我要飛走 23113.4.3 線上的香蕉 23413.5 do記法 23513.5.1 按我所說的去做 23613.5.2 我皮埃爾又回來了 23713.5.3 模式匹配和計算失敗 23813.6 列表monad 23913.6.1 do記法和列表推導(dǎo)式 24113.6.2 MonadPlus和guard函數(shù) 24213.6.3 馬的探索 24313.7 monad定律 24513.7.1 左單位元 24613.7.2 右單位元 24613.7.3 結(jié)合律 247第14章 再多一些monad 24914.1 Writer?我沒聽說過! 24914.1.1 monad趕來營救 25114.1.2 Writer類型 25314.1.3 對Writer使用do記法 25414.1.4 給程序添加日志 25514.1.5 低效的列表構(gòu)造 25714.1.6 使用差分列表 25814.1.7 比較性能 25914.2 Reader?呃,不開玩笑了 26014.2.1 作為monad的函數(shù) 26114.2.2 Reader monad 26114.3 帶狀態(tài)計算的優(yōu)雅表示 26214.3.1 帶狀態(tài)的計算 26314.3.2 棧和石頭 26414.3.3 State monad 26514.3.4 獲取和設(shè)置狀態(tài) 26714.3.5 隨機性和State monad 26814.4 墻上的Error 26914.5 一些實用的monad式的函數(shù) 27114.5.1 liftM和它的朋友們 27114.5.2 join函數(shù) 27414.5.3 filterM 27614.5.4 foldM 27814.6 創(chuàng)建一個安全的RPN計算器 27914.7 組合monad式的函數(shù) 28114.8 創(chuàng)建monad 282第15章 zipper 28715.1 在樹上移動 28715.1.1 面包屑 29015.1.2 向上走 29115.1.3 處理焦點處的樹 29315.1.4 一路走到頂端,那里的空氣既新鮮又干凈 29415.2 在列表上定位 29415.3 一個非常簡單的文件系統(tǒng) 29515.3.1 為文件系統(tǒng)創(chuàng)建一個zipper 29615.3.2 操作文件系統(tǒng) 29815.4 小心行事 29915.5 謝謝閱讀! 301
展開全部
Haskell趣學(xué)指南 作者簡介
作者介紹Miran Lipova?a 斯洛文尼亞共和國盧布爾雅那城的一位計算機科學(xué)專業(yè)的學(xué)生。除了對Haskell的狂熱,他還喜歡拳擊,玩低音吉他,當然還有畫畫。譯者介紹李亞舟 畢業(yè)于山東理工大學(xué),現(xiàn)就職于IBM LTC,從事Linux發(fā)行版相關(guān)工作。對內(nèi)核、體系結(jié)構(gòu)、編程語言及技術(shù)翻譯有濃厚興趣,敬仰那些孜孜不倦地精益求精的人們。宋方睿 本科生,清華大學(xué)開源鏡像站維護者,blue-lotus戰(zhàn)隊成員,熱愛算法和程序設(shè)計語言理論,關(guān)注高性能計算、自然語言處理及前端技術(shù)。個人博客http://maskray.me。