zoukankan      html  css  js  c++  java
  • 我的开源.NET函数式编程类库——VBF 1.0 BETA1发布

    很早就开始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中使用泛型的经验。大家均可下载我的代码参考。项目主页:http://www.sf.net/projects/vbf

    希望大家对我的VBF提出建议,同时敬请关注VBF的后续版本,有更多精彩的内容。

  • 相关阅读:
    算法笔记_182:历届试题 核桃的数量(Java)
    算法笔记_181:历届试题 回文数字(Java)
    算法笔记_180:历届试题 国王的烦恼(Java)
    算法笔记_179:历届试题 数字游戏(Java)
    算法笔记_178:历届试题 邮局(Java)
    算法笔记_177:历届试题 城市建设(Java)
    算法笔记_176:历届试题 最大子阵(Java)
    算法笔记_175:历届试题 蚂蚁感冒(Java)
    redis集群与分片(2)-Redis Cluster集群的搭建与实践
    redis集群与分片(1)-redis服务器集群、客户端分片
  • 原文地址:https://www.cnblogs.com/Ninputer/p/273627.html
Copyright © 2011-2022 走看看