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,但是返回值每次都不同。这就是有副作用。
    函数的引用透明性和函数没有副作用是一个事情的两种说法。

    评论

报告相同问题?

悬赏问题

  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。