12 1 1 使用高階函式

2021-06-28 06:52:26 字數 900 閱讀 7642

12.1.1 使用高階函式

在f# 中,處理序列的函式在seq 模組中,我們將解釋乙個非常普通的函式,seq.unfold。可以看到,與fole 函式是一對,它的引數為集合,把集合「摺疊」成乙個值;unfold 的引數乙個值,把這個值「展開」為序列。下面的**片斷生成的序列,包含格式化為字串的、 0 到10 的數字:

> let nums = seq.unfold (fun num –>

if(num <= 10) then some(string(num), num + 1) else none) 0

val nums : seq= seq ["0";"1"; "2"; "3"; ...]

num 值表示在序列生成過程中使用的狀態。當第一次呼叫 lambda 函式時,num 的值設定為第二個引數的初始值(在本例中為零);lambda 函式返回包含元組的選項型別值,none 值標誌序列的結束,當返回some 時,我們在元組中給它兩個不同值:

■乙個值,在序列中返回(這裡,轉換為字串的數字)。

■另乙個值,是用於lambda 函式下一次呼叫時的新的狀態。

從輸出中可以發現,返回值的型別是seq,這是 ienumerable型別的 f# 型別別名。同樣的型別可以有不同方式,同樣,float 是system.single 的c# 別名,所以,可以自由地混合使用。輸出還顯示了序列的前面幾個元素,因為這個序列可能是無窮的,所以,f# 互動控制台不會嘗試輸出所有的值。

標準的.net 庫沒有為c# 包含類似的方法。在c# 中,很少的幾個方法之一,是生成序列的enumerable.range(來自system.linq 命名空間),返回公升序的數字序列,指定長度(第二個引數),指定起始數(第乙個引數)。我們也可以在c# 中實現類似seq.unfold 的函式,但我們將會看到類似結果,可以很容易地通過使用c# 迭代實現,下一節我們就來看一下。

12 1 1 使用高階函式

12.1.1 使用高階函式 在 f 中,用於處理序列的函式在 seq 模組中,我們將解釋乙個非常普通的函式,seq.unfold。你可以看到,它與 fole 函式相對,它取乙個集合,並把它 折 成單一值。unfold 取單一值,把它 展開 為乙個序列。下面的 片斷展示了如何生成乙個序列,包含把 10...

1211物件導向 封裝 建構函式

三 類的屬性 封裝字段 包含兩個方法 1 讀訪問器 get 取值 2 寫訪問器 set 賦值 封裝 private string nihao 原有的普通變數private私有的,通過右鍵 重構 封裝字段實現 預設一直存在get和set兩個方法,但是一直隱藏資訊的特性 set 封裝字段 public ...

常見高階函式使用

python中如果將乙個函式名傳送給另乙個函式作為形參,那麼就成這個函式為高階函式 簡單例子 f abs 這就表示python中函式名是可以傳送給變數的 print f 9 def add a,b,f return f a f b print add 1,2,abs 如果將函式名傳入為另乙個函式引數...