zoukankan      html  css  js  c++  java
  • N0---关于变量

    变量=函数?

    有人说按照纯粹的函数式编程的观点看一切都是函数,没有变量,例如下面这样就看不到变量了。

    print(f(g(x)));

    有人说按照声明式的编程观点看一切都是变量的赋值过程,没有函数,例如

    select x=(select y = select(z = 1))

    -----------------------------------------------------------------------------------------------------------------------------

    当然,两者都是诡辩。

    前者把变量藏了起来。

    后者把运算过程藏了起来。

    但是它们给人美丽的幻想,让人觉得二者可以相互代替。

    仔细讨论

    虽说y = f(x),那么f(x)=y;正过来,反过去都是对的。

    但是他们并不能相互代替,回到变量和函数在数学中最初的定义其实就能分清了。

    【变量】实际是一个容器,里面可以放数字。

    【函数】实际是一种对应关系。

    y=f(x)中间的【等于号】的意思是,x经过一种对应关系f,最终得到的结果等于y。

    函数是--------对应关系----过程----动词;

    变量是--------------容器----结果----名词。

    这样就把二者区分开来了。

    不可混为一谈

    马克思说:人是社会关系的总和。

    这样说,乍一看是把变量和函数混为一谈了。因为【人】是个名词,也就是变量,【社会关系】是一种关系,也就是函数。

    但是仔细看看,【人】是一个名词,但是【社会关系】并非一个动词。

    【社会关系】是动词的指代物,动词的指代物是一个名词。

    我【爱】这个人,这个人是我的【爱人】。

    我【赡养】父母,我是父母的【赡养人】。

    社会关系的具体内容【爱】【赡养】是动词,但是我们要把这些名词化,就能讨论了。

    名词,可以指代动词。

    变量,可以容纳函数--------通常我们会说把函数当作一个变量(术语是委托)-------函数的内容本身是做一些动作---------但是名词化后变成了变量只看到了输入输出。

    简而言之,名词可以指代动作,变量可以指代函数,但是不能说手指就是月亮。

    -------------------------------------------------------------------------------------------------------------------------------------

    一一对应

    一一对应可能是最简单的关系,是理解的基础。

    1根手指代表1只羊,2根手指代表2只羊,3只手指代表3只羊。

    当一个符号,能够被人对应到现实中的事物时,事物本身的【信息】就被抽象了出来,人就可以纸上谈兵了。

    【数字】是现实中各种存在的各种数量的指代,

    【数字式】是对现实中各种基本数量关系的抽象,是对动词的抽象,是二次抽象。

    【代数】则是,对数字的指代,是对现实的三次抽象。

    第一次:【数字】--量词

    数字1可以代表1根手指也可以代表1只山羊。

    数字2可以代表2根手指也可以代表2只山羊。

    1,2,3,4等数字代指了纯粹的数量。

    第二次:【数字式】--动词

    3只山羊,杀掉1只,还剩2只。

    3个杯子,打碎1个,还剩2个。

    3-1=2

    我用统一的动词【-】,代替了杀掉/打碎等等动词,【-】把原来动词中,和数量无关的关系丢弃了。

    第三次:【代数式】--量词的代词。

    x-y=z

    我对数字本身又抽象了一次,这就有了代数,才有了后来的程序。

    一一对应的意义

    一一对应是数学开始的地方,也是每一个有意义的数学运算结束的地方。

    【一一对应是理解的基础】这是我的个人经验和猜想,上面的数学史是一个论据。

    一开始的对应是简单的;中间的推理是人难以理解的;最终的结果是对应某种事实的。很多的数学过程都是这样的。

    用户不知道你怎么干的,但是知道我怎么操作,得到我想看的东西。用户对你的软件就要有一些理解,需要理解操作和结果是怎么对应的。

    对于用户来说,软件永远是声明式的,用户说要有光,然后就有了光。而各种计算都是机器的事情。

    自我反问

    虽然是我自己提出的猜想,但是我也是不确定的。

    • 是不是用语言的问题

    我质疑【一一对应是理解的基础】这个命题的一个地方是:是不是只有用某种语言进行理解的时候才有一一对应的问题。

    有人对你说【帮我把毛巾拿过来】,首先你会找这个人的【毛巾】,也就是把【毛巾】对应到现实中的毛巾,然后你会找这个人说的【我】,对应的是这个人,然后你要懂得【拿过来】这个动词代表的现实中的动作,然后你就懂了整句话的意思。

    只要是【语言】总要进行对应的,可能是语言中的词语和现实中的某种东西对应。也可能是语言中的词语和语言中的词语进行对应。

    所以是不是,不用语言进行思考,我就不需要一一对应了??

    现在问题变成了,不用语言能思考吗??

    • 是一对一?

    有人说一句话【紫罗兰很美】,然后假设你没见过紫罗兰,但你知道这是一种花,然后你说“啊,我理解了”。

    当然,上面的讨论没有限定【理解】的意思。

    当然这种批判方式有点没事找事了,我心里默认的是【大体理解也算是理解】。

    这个其实就是逻辑学上说的范畴,先有范畴,才能讲逻辑关系。

    ------------------------------------------------------------------------------------------------------------------------------------------------

    总结

    1.计算机程序归根结底就是数学。

    程序=数据结构+算法。

    程序就是一篇描述变量如何变化的文章。

    这是关于计算机程序的本质。

    实现需求才是程序本质?不对,我可以写着玩。

    这种让变量发生变化,计算的能力,也是计算机得名的原因。

    2.计算机擅长的部分是数值化的计算。

    人们总是把复杂的计算过程丢给计算机,得到结果。

    自己要做好的则是梳理现实问题,写好算法,做好一一对应的工作。

  • 相关阅读:
    YAOI Summer Round #4 (Div.2) 题解
    2021 暑假集训(福建师大附中)
    YAOI Round #7 题解
    YAOI Round #5 题解
    插头DP
    四边形不等式
    YAOI Round #3 题解
    关于 2020 年
    图论相关性质和结论(基础)
    斜率优化 DP :Luogu P2365 P5785「SDOI2012」任务安排 & 弱化版
  • 原文地址:https://www.cnblogs.com/fabao/p/10320643.html
Copyright © 2011-2022 走看看