我的開源.NET函數式編程類庫——VBF 1.0 BETA1發布

來源:互聯網
上載者:User

很早就開始VBF的設計,在經曆開發和調整了兩個月的時間後,VBF的第一個BETA版終於和大家見面了!我是從前一階段部落格園上較為流行的動態語言討論上獲得靈感。我主要不是想寫一個動態語言,而是發現很多動態語言共有的特徵——不同程度地支援函數式編程(Functional Programming,FP)。這是一種顯著不同於命令式編程(目前的VB,和C#均為命令式程式設計語言,面向過程和物件導向也是命令式編程範式的擴充)的編程範式。它講究組合、高階函數和延遲計算。在純粹的FP語言(Lisp, SML)可以不使用變數,函數執行沒有副作用,運算式的意義更接近數學式的意義而不是電腦的執行方式。函數式語言具有比命令式語言更高的數學抽象力,因此在描述某些演算法的時候比命令式語言更佳。現在人們發現,在命令式語言中引入局部的函數式編程思想,能將兩種範式的好處合二為一。VB9和C#3都將不同程度地引入函數式編程的特性。

我開發VBF主要就是希望利用Visual Basic 2005和C# 2.0自身所具有的語言抽象力將函數式編程的思想引入。我不對編譯器進行改造,也不編寫任何外掛程式,只要引用我的類庫,就可以實現一些非常精妙的文法。

[VB]
Dim list As List(Of Integer) = GetList() '假設用一些數填充list
Dim result As List(Of Integer)
'找到所有大於25或者小於等於17的數,存入result
result = list.FindAll(IdInt > 25 Or IdInt <=17)

[C#]
// using I = VBF.Functional.Identities
List<int> list = GetList(); //假設用一些數填充list
//找到所有大於25或者小於等於17的數,存入result
List<int> result = list.FindAll(I.IdInt > 25 | I.IdInt <= 17);

如你所見,“IdInt”就如同運算式中變數的預留位置,由它產生的運算式並不求值,而是將運算式的運算規則儲存下來傳遞給FindAll,而FindAll作為一個高階函數將運算式作用於列表中的每一項上。這就是延遲計算。這裡IdInt為“恒等組合子(Identity Combinator),是VBF初期所支援的幾個組合子之一。通過組合子之間的組合就可以重用函數的功能,比如IdInt和+(對結果進行加法的組合子)和7(常函數)三者組合,就產生了對一個數加7的函數。這就是我VBF BETA1的最準系統。我在VBF 1.0 BETA1中支援了以下特性:

Functor 函數體基類,支援大量組合運算子和延遲求值
Combinator 組合子基類
Identity和Constant組合子
Predicate 謂詞
ComparisonPredicate 比較謂詞(大於、小於等)
進行通用四則運算的組合子
進行字串處理的組合子

我的VBF代碼中非常頻繁地使用泛型和運算子多載,大量手法均為主流類庫所見不到的。我也因此獲得了非常豐富的在.NET中使用泛型的經驗。大家均可下載My Code參考。項目首頁:http://www.sf.net/projects/vbf

希望大家對我的VBF提出建議,同時敬請關注VBF的後續版本,有更多精彩的內容。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.