探索"+"的原本


躺了一会,回忆以前看过的一些描述"原本"的知识,突然想到简单的数学运算1+1=2,在程序设计里的原本是什么呢,想到这里,不睡了,按照前人的指引,我也来探索一下阿

(以下代码使用C#4.0,未使用LINQ,其他语言可以找对应的语法)

直接写下最直接的代码如下

这就是1+1=2,没错!这个子程序很具体,专门解决这个问题!

对1+1=2进行一般化,变成a+b=c,是的,"+"的含义不就是这样吗?OK,演变成下面这样:

这样能解决的问题比上一步要宽泛的多了,不是吗?

问题:a+b+c=d?或者a+b+c+....=X?

"+"不局限于表示两个数相加,而是表示对N个数进行"求和",问题域又扩大了一点.那就往下写吧:

现在可以对任意多个数进行"+",而不是局限于a+b=c的形式了,更加接近"原本"了,呵呵 参数类型为List<int>?这里有点疑问,仅限列表,数组不行?队列不行?栈不行?。。。按道理来说,可枚举的一串数字应该都能求和啊,修改如下:

没问题了,这样要通用多了。 又想到一个问题:"+"就是一个二元操作符号,那么同样作为二元操作符的"减","乘","除"等是否有更一般的形式呢? 是的,考虑如下描述:对一个整数的集合从头至尾都进行一次操作(加减乘除。。。)并且得到操作结果。何谓二元操作?a+b=c,a*b=c,a/b=c他们的共同形式就是输入两个操作数,运算以后返回一个新的操作数,这里用C的语法来描述会更容易理解,满足型如typedef int (*OP)(int a,int b)的函数都可以称作二元操作,对应C#里的形式就是Func<int a,int b,int c>的表达式。OK,演变成下面这样:

测试代码如下:

一切正常,:) 遗憾的是,这个表示法只能针对整数,这可不是好现象,我希望小数,甚至是字符串也能用于这种表示法,想一想:把一串地址加到一起,如下:"中国"+"湖南"+"张家界"="中国湖南张家界",这过分吗?NO,很自然。 那就要对"类型"进行通用化了,大家都知道,对"类型"编程,有一个术语叫"元编程",虽然C#的元编程不强,但是解决目前的问题够了,写出下面的版本:

测试代码如下:

很神气吧!

新问题又来了,二元操作并没有定义返回值和操作数都是一个类型阿,甚至操作数也没有定义必须是一个类型啊!!!需要得到整数的结果,"100"+"50"+"30"=180,这也没有说不过去吧。

演变成如下:

测试如下:

回顾一下二元操作符的定义,目前是不是更接近它原本的含义?虽然方法名还是叫"Sum",其实含义已经更广泛了

优质内容筛选与推荐>>
1、idea与eclipse快捷键
2、rest-framework 序列化格式Restful API设计规范
3、Listbox移除
4、洛谷 P3224 [HNOI2012]永无乡
5、jq 一些小方法


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号