Pfeffer 2019-07-14 01:05 采纳率: 50%
浏览 386
已结题

对函数式编程的不理解 (Haskell)

  1. 函数式编程没有副作用? 网上说,是因为只有返回值,而中间不会抛出任何东西,或者是函数式编程不受任何外界的影响。 这一点我完全没有办法理解, 程序结构写完之后都是固定的,当我输入什么,就输出什么,既然结构固定了,怎么还会有影响呢?

  2. 函数式编程在固定的输入下就有固定的输出? 难道不是所有的程序语言在固定的输入下只有固定的输出吗?

  3. 说函数式变成语言是透明的,这一点我也完全没有办法理解,什么叫引用透明。

请大佬用比较简单的Java或者Haskell语言解释一下上述三个问题,跪谢!

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-07-14 15:10
    关注

    不是“函数式编程没有副作用”,而是避免副作用是函数式编程追求的目标。
    函数式编程和函数式编程语言是两个概念,前者是指方法论。好比,C++是OOP语言,但是你完全可以用C++但是不面向对象。或者在C里面模拟面向对象。

    看这样一个程序:

    #include <stdio.h>
    int x;
    int foo(int y)
    {
    x = x + y;
    return y;
    }
    int main()
    {
    x = 1;
    int i = foo(2);
    i = foo(2);
    ...
    }
    

    显然虽然传入的参数都是2,但是返回值每次都不同。这就是有副作用。
    函数的引用透明性和函数没有副作用是一个事情的两种说法。

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧