Haskell 學習筆記-18:sequence、mapM、forever 的實現
編寫函式,很容易混淆返回型別。如果函式有副作用,必須用 return 返回型別。從有副作用的函式”取值“,必須用 <- 。另外 return 後面如果有複雜表示式,還是用括號擴起來吧,因為 return 和後面符號結合的優先順序很高,不小心就出現符號結合順序的錯誤。
sequence' [] = return []
sequence' (x:xs) = do
a <- x
b <- sequence' xs
return (a : b)
mapM' :: (a -> (IO ())) -> [a] -> (IO ())
mapM' x [] = return ()
mapM' x (y:ys) = do
x y
mapM' x ys
return ()
forever' x = do
x
forever' x
親自編寫這些庫函式有兩個好處,一是對這些函式的作用理解更深,其次,對於理解 Haskell 語法、語義非常有幫助。
相關推薦
Haskell 學習筆記-18:sequence、mapM、forever 的實現
編寫函式,很容易混淆返回型別。如果函式有副作用,必須用 return 返回型別。從有副作用的函式”取值“,必須用 <- 。另外 return 後面如果有複雜表示式,還是用括號擴起來吧,因為 return 和後面符號結合的優先順序很高,不小心就出現符號結合順
csdn學習筆記二:連結串列原型、do原型分析
設計連結串列,並設計其迭代函式 生成連結串列、列印連結串列 arr = {10, 20, 30, 100, 101, 88, 50}; head = nil; local i = 1 while true do if arr[i] then head = {va
csdn學習筆記三:meta元表、元方法 __index, __newindex、rawset、rawget
重要:在表和元表的__index 和 __newindex 都沒有需要操作的key時,賦值table操作會呼叫__newindex, 取值操作會呼叫__index 元表設定setmetatable t1 = {}; t2 = {}; print("t1=",
Haskell 學習筆記-20:除法( Division, UVa 725)
看了幾本 Haskell 教程,我覺得這些書都沒有站在程式設計師的角度安排內容順序。其實對於大部分程式設計師來講,腦子裡就是 C 語言的基本套路。因此, Haskell 的教程應該從 C 語言相近的方式開始課程。等我用 Haskell 開發一個應用系統後,考慮編寫一本真正的入門教程。今天
Java學習筆記1:計算機基礎知識、java語言基礎。
一、計算機基礎知識 1、 計算機是一種能夠按照程式執行,自動、高速處理海量資料的現代化智慧電子裝置。由硬體和軟體所組成,沒有安裝任何軟體的計算機稱為裸機。常見的形式有臺式計算機、筆記本計算機、大型計算機等。 硬體通常由CPU、主機板、記憶體、電源、主機箱、硬碟、顯示卡、鍵盤、滑鼠,顯示器等多
python基礎教程_學習筆記18:標準庫:一些最愛——shelve
變量綁定 工作 關閉 mes 名稱 tis 標準 times data- 版權聲明:本文為博主原創文章,未經博主同意不得轉載。 https://blog.csdn.net/signjing/article/details/3602998
angular6學習筆記18:請求防抖
根據使用者鍵盤對的輸入,向遠端伺服器傳送請求並返回資料,即:常見的搜尋功能 <input type="text" #searchSource placeholder="請輸入搜尋的內容"(keyup)='search(searchSource.value)'> 在搜尋時:inpu
Java學習筆記總結:JAVA中String、StringBuilder、StringBuffer類的區別
不斷地學習,不斷地填充自己的技術庫,學習Java已經有一段時間了,由一開始的不適應到後來的足以靈活應對,不僅僅取決於老師的精緻講課,還有就是依靠我的學習祕籍:記錄自己的學習筆記。今天給大家分享的技術學習筆記是JAVAString,StringBuilder以及StringBuffer這三個類之間的區
csdn學習筆記三:meta元表、元方法 __index, __newindex、rawset、rawget
重要:在表和元表的__index 和 __newindex 都沒有需要操作的key時,賦值table操作會呼叫__newindex, 取值操作會呼叫__index 元表設定setmetatable t1 = {}; t2 = {}; print("t1=",t1);
深度學習筆記1:end-to-end、anchor box解釋、人體檢測程式碼
非end-to-end方法: 目前目標檢測領域,效果最好,影響力最大的還是RCNN那一套框架,這種方法需要先在影象中提取可能含有目標的候選框(region proposal), 然後將這些候選框輸入到CNN模型,讓CNN判斷候選框中是否真的有目標,以及目標的類別是什麼。在我們看到的結果中,往往是類似與下圖這種
docker學習筆記18:Dockerfile 指令 VOLUME 介紹
在介紹VOLUME指令之前,我們來看下如下場景需求: 1)容器是基於映象建立的,最後的容器檔案系統包括映象的只讀層+可寫層,容器中的程序操作的資料持久化都是儲存在容器的可寫層上。一旦容器刪除後,這些資料就沒了,除非我們人工備份下來(或者基於容器建立新的映象)。能否可以讓容器程序持久化的資料儲存在主機上呢?這
Java學習筆記18:Java中使用toString()方法
toString public String toString()返回該物件的字串表示。通常,toString 方法會返回一個“以文字方式表示”此物件的字串。結果應簡明易懂。建議所有子類都重寫此方法。 Object 類的 toString 方法返回一個字串,該字串由類名(物件是該類的一個
快速傅立葉變換FFT的學習筆記一:C語言程式碼的簡單實現
快速傅立葉變換FFT的學習筆記一:C語言程式碼的簡單實現 fft.c #include "math.h" #include "fft.h" void conjugate_complex(int n,complex in[],complex out[]) { int i = 0
Odoo10學習筆記三:模型(結構化的應用數據)、視圖(用戶界面設計)
其他 描述 用戶界面 列表 支持 字段 界面設計 允許 學習 一:模型 1:創建模型 模型屬性:模型類可以使用一些屬性來控制它們的一些行為: _name :創建odoo模型的內部標識符,必含項。 _description :當用戶界面顯示模型時,一個方便用戶的模型記錄標題。
hibernate框架學習筆記4:主鍵生成策略、對象狀態
alt rri gen 線程安全 理論 微軟 unit conf lose 創建一個實體類: package domain; public class Customer { private Long cust_id; private Stri
hibernate框架學習筆記7:HQL查詢、Criteria查詢
import res ber return org close 返回 closed 所有 HQL查詢:hibernate獨有的查詢語言 適用於不復雜的多表查詢 示例: 實體類: package domain; public class Customer {
分散式學習筆記二:從分散式一致性談到CAP理論、BASE理論
問題的提出 在電腦科學領域,分散式一致性是一個相當重要且被廣泛探索與論證問題,首先來看三種業務場景。 1、火車站售票 假如說我們的終端使用者是一位經常坐火車的旅行家,通常他是去車站的售票處購買車 票,然後拿著車票去檢票口,再坐上火車,開始一段美好的旅行----一切似乎都是那麼和諧。想象一
Kali學習筆記31:目錄遍歷漏洞、檔案包含漏洞
文章的格式也許不是很好看,也沒有什麼合理的順序 完全是想到什麼寫一些什麼,但各個方面都涵蓋到了 能耐下心看的朋友歡迎一起學習,大牛和槓精們請繞道 目錄遍歷漏洞: 應用程式如果有操作檔案的功能,限制不嚴格會導致可以訪問到WEB目錄意外的檔案 目錄遍歷漏洞和檔案包含漏洞本質以及利用方法一
odoo10學習筆記二:繼承(擴充套件)、模組資料
一:繼承 在不改變底層物件的時候新增新的功能——這是通過繼承機制來實現的,作為在現有物件之上的修改層,這些修改可以發生在所有級別:模型,檢視和業務邏輯。不是直接修改現有模組,而是建立一個新模組以新增預期的修改。 1:擴充套件模型 Odoo 模型存在 Python 的模組之外, 在中間登錄檔那裡
odoo10學習筆記二:繼承(擴展)、模塊數據
標簽 添加 方便 before 表達 use lds extension 簽名 一:繼承 在不改變底層對象的時候添加新的功能——這是通過繼承機制來實現的,作為在現有對象之上的修改層,這些修改可以發生在所有級別:模型,視圖和業務邏輯。不是直接修改現有