6.3.1 處理計畫列表
在前面的示例中,因為我們想要列印新的計畫,因此,使用了命令式的 for 迴圈;如果想要建立包含新的計畫列表,可以使用 list.map 函式,就像這樣:
let newschedules =
list.map(fun s –>
s |> mapschedule (fun d -> d.adddays(7.0))
)schedules
list.map 函式的第乙個引數是函式,通過使用原來的計畫,獲得乙個新的計畫值。在此示例中,我們計算出乙個新的計畫,並將它作為函式的結果返回。前面的**可以通過使用管道和散函式應用來簡化,就像這樣:
let newschedules =
schedules|> list.map (mapschedule (fun d -> d.adddays(7.0)))
當我們為函式 mapschedule 指定第乙個引數(用於計算日期的函式),就得到型別為 schedule –> schedule 的函式,這正是 list.map 操作需要的第乙個引數值,因此,不必顯式寫 lambda 函式。這個示例還演示了很多高階函式把原始值作為最後乙個引數值的原因,即,在處理列表值時,可以同時使用管道和散[函式]應用。
還有一種方法,是使用序列表示式(sequence expressions),同樣簡潔,但是,對於新手來說,可能更具可讀性。我們會在第十二章討論序列表示式,現在,要看看 c# 是如何實現相同功能的。
6 3 處理計畫
6.3 處理計畫 在本節,我們要把上一節的技術應用到可選值。在處理元組時,我們發現使用函式,有助於處理元組中的元素 類似地,處理可選值時,同樣需要使用高階函式,對可選值中的乙個或多個進行某種操作。我們接著上一章的示例,從計畫型別開始,然後,看一下選項型別。在前面的章節中,我們實施了乙個表示事件計畫的...
6 3 處理計畫
6.3 處理計畫 在本節中,我們將把上一節的技術應用到可選為值。在處理元組時,我們發現寫函式,有助於處理元組中的乙個元素。同樣,處理可選值時,需要高階函式,在乙個或多個可選值上執行某種操作。我們接著上一章的示例,我們從計畫型別開始,然後,看一下選項型別。在前面的章節中,我們實施了乙個型別,表示事件的...
6 7 處理列表
6.7 處理列表 在第三章,我們討論過列表,學習了顯式使用遞迴和模式匹配處理列表。還用 c 實現了函式式列表型別。第 4 章的演示樣例應用程式就以這樣的方式使用列表,可是要注意,顯式寫列表處理並不有用。在這一章。將用到遞迴模式,因此,你可能已經知道我們下一步要討論什麼了。我們能夠使用高階函式來處理列...