躺了一会,回忆以前看过的一些描述"原本"的知识,突然想到简单的数学运算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. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  2. 探索c#之递归APS和CPS

    接上篇探索c#之尾递归编译器优化 累加器传递模式(APS) CPS函数 CPS变换 CPS尾递归 总结 累加器传递模式(Accumulator passing style) 尾递归优化在于使堆栈可以不 ...

  3. 自定义样式的select下拉框深入探索

    第一个版本: 首先实现自定义select下拉框应该具有的功能,我是选择将原来的select隐藏掉,自己在jquery代码中动态写进去<dl><dd><dt>这样的结 ...

  4. 深入探索AngularJS(持续更新)

    数据双向绑定并不是Angular最出彩的地方.大部分对AngularJs的介绍都偏重于使用,使用的学习只是学了AngularJs的API,而那只能AngularJs的很小一部分.随着使用越来越深,系统 ...

  5. Swift 性能探索和优化分析

    本文首发在 CSDN<程序员>杂志,订阅地址 http://dingyue.programmer.com.cn/. Apple 在推出 Swift 时就将其冠以先进,安全和高效的新一代编程 ...

  6. [转]struct 用法深入探索

    struct用法深入探索 作者: Cloudward 1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估.因为一个大型 ...

  7. Android开发艺术探索第五章——理解RemoteViews

    Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...

  8. Android开发艺术探索——第二章:IPC机制(上)

    Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化 ...

  9. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

随机推荐

  1. php 生成压缩文件

    $fileList = array( "site_upload/form_file_clause_extend/20180224/1519456901_1481718257.jpg" ...

  2. HDU 5901 Count primes 大素数计数

    题意:计算1~N间素数的个数(N<=1e11) 题解:题目要求很简单,作为论文题,模板有两种 \(O(n^\frac{3}{4} )\),另一种lehmer\(O(n^\frac{2}{3})\ ...

  3. 【设计模式】 模式PK:策略模式VS桥梁模式

    1.概述 我们先来看两种模式的通用类图. 两者之间确实很相似.如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样 ...

  4. python内置函数lambda、filter、map、reduce

    lambda匿名函数 1.lambda只是一个表达式,函数体比def简单多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去 3.lambda函数 ...

  5. Elasticsearch 5.6.5 安装教程

    下载地址   https://www.elastic.co/downloads/past-releases/elasticsearch-5-6-5 安装环境  centos6.5  ,  jdk1.8 ...

  6. java将文件转为UTF8工具类

    package hiveTest; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File ...

  7. js刷新页面方法 -- (转)

    1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet])   参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里 ...

  8. I题 hdu 1234 开门人和关门人

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1234 开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)   ...

  9. mysql 设置字符集

    可以用:show create table table_name查看建表信息 也可用: show create database database_name查看建库信息 mysql> creat ...

  10. [Leetcode Week14]Path Sum II

    Path Sum II 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/path-sum-ii/description/ Description Giv ...