躺了一会,回忆以前看过的一些描述"原本"的知识,突然想到简单的数学运算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. [LeetCode] 13. Roman to Integer ☆☆

    Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...

  2. 一道lambda表达式题目

    #include <iostream> #include <functional> using namespace std; auto Pair = [](auto u, au ...

  3. 【vijos】P1448 校门外的树

    [题意]两种操作,[L,R]种新的树(不覆盖原来的),或查询[L,R]树的种类数.n<=50000. [算法]树状数组||线段树 [题解]这题可以用主席树实现……不过因为不覆盖原来的,所以有更简 ...

  4. 【BZOJ】1229 [USACO2008 Nov]toy 玩具

    [算法]三分+贪心 [题解] 数据范围小的版本:餐巾计划 这题不是使用最小费用流的下凸函数,因为这题是要满足最大流,那么这题到底在三分什么? 三分的这个函数,其实是总费用随卖出玩具量变化而变化的函数, ...

  5. bootstrap框架的搭建

    bootstrap框架 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快 ...

  6. Web Session 浅入浅出(山东数漫江湖)

    使用过几种Web App开发语言和框架,都会接触到Session的概念.即使是一个简单站点访问计数的功能,也常常使用Session来实现的.其他常用的领域还有购物车,登录用户等.但是,对Session ...

  7. centos6.4 yum安装nginx+mysql+php

    1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport ...

  8. 简易微信小程序签到功能

    一.效果图 点击签到后 二.数据库 用一张数据表存用户签到的信息,每次用户签到都会往表中添加一条记录了用户id和签到日期的数据,如下图 三.后端 后端写两个接口,一个用于查询用户今日是否签到和签到记录 ...

  9. [IOS]Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ 百度云盘下载地址 http:// ...

  10. bzoj 3197 DP

    这道题我们可以看成给定两个黑白树,可以修改其中一棵树的颜色,问最少修改多少颜色可以使两棵树同构. 首先我们知道在树的同构中树上最长链中点(如果是偶数的话就是中间两个点)是不变的,我们把这个点叫做树的重 ...