V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sensui7
V2EX  ›  问与答

函数式编程是否可称为面向数学的编程?以及胡思乱想

  •  
  •   sensui7 · 2016-11-11 03:03:50 +08:00 via iPhone · 1375 次点击
    这是一个创建于 2722 天前的主题,其中的信息可能已经有所发展或是发生改变。
    突然觉得 oo 适合组织代码,最终解决“现实问题(双关)”,靠的还是数学知识,而函数式似乎是建立在数学思想上的,到处都体现着数学概念的实现。
    是否可以说函数式就是面向数学的编程。

    比如说“生成器”,以前不是太理解,教程往往这么解释,什么几百万的元素太多,用生成器,这样省资源,挠头表情。

    从数学的角度看,生成器不就是一个数列函数吗,这个函数只是产生一个数列中的值。

    是否也可以说,只要有值的地方,都可以用函数代替。因为函数最终是要计算的,结果只能是一个值。而迭代器,只是一种所有值都确定的,只需要取就可以的函数。
    而 lambda 表达式和函数的区别,我就不懂了,不会微积分, python 中的 lambda 表达式在我看来就是匿名函数,它特殊的地方又在哪里?
    lambda 计算的结果还是一个值。是否可用函数代替,
    函数需要定义,和调用, lambda 表达式有定义的步骤吗,它没有名字,在 js 中匿名函数没有声明提升,说明解释器并不把他将函数对待,但它却能完成函数形式的计算,在 python 中,需要用 lambda 前缀,假如 js 解释器默默的将匿名函数在预执行阶段将它们统统提升会怎么样,显然它就等于函数了。 python 的函数没有声明提升,那是不是说所有函数都是运行时创建的?那 lambda 与函数的区别又在哪里?这只是语言实现上的问题。
    lambda 所扮演的角色呢?表达式最终要被计算出一个值的,
    是否可以说, lambda 表达式将普通表达式变成函数?或者说他是表达式形式的函数?

    最终的结果就是值跟表达式都可以用函数代替?表达式其实就是计算,也就是说数据和计算都可以用函数代替。

    那么程序是否只剩下语句和函数了?

    完了,我好像走火入魔了,我得赶紧找点函数式理论书籍了。
    eccstartup
        1
    eccstartup  
       2016-11-11 03:09:27 +08:00
    函数式编程是有实在定义的,数学是没有实在定义的。
    面向数学的编程,扯太大了,没什么意义
    sensui7
        2
    sensui7  
    OP
       2016-11-11 03:12:15 +08:00 via iPhone
    @eccstartup 我只是在做一些思考,并不是纠结名字,况且数学怎么会没有定义呢?
    Miy4mori
        3
    Miy4mori  
       2016-11-11 03:16:19 +08:00 via Android
    Python 的函数式……聊胜于无……
    eccstartup
        4
    eccstartup  
       2016-11-11 03:17:28 +08:00
    @sensui7 什么是数学,是有答案的。数学是什么,定义很模糊

    找个函数式编程语言看看,时间长了这些困惑都理解了
    Haskell Clojure APL 这些都可以,推荐 Haskell
    https://www.haskell.org/
    SoloCompany
        5
    SoloCompany  
       2016-11-12 03:08:18 +08:00
    函数式编程的精髓在于高阶函数
    lambda 实质就是(匿名)函数,只是更轻量更接近语句体因而使用起来更没有负担,也更有利于生成类似于 DSL 这样的高定制性语言
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4787 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:52 · PVG 17:52 · LAX 02:52 · JFK 05:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.