Clojure 函数规划中的数学函数

Clojure 函数规划中的数学函数,clojure,functional-programming,Clojure,Functional Programming,我刚刚开始学习clojure,因为它属于函数式编程的一个范畴,所以作为第一步,我要弄清楚它与命令式编程的区别。所以我从维基百科和其他来源学到了一些原始知识。所以我对这句话感到非常困惑 命令式编程中有函数,函数式编程中有数学函数。这里数学函数的确切含义是什么?它与函数有什么不同 从数学上考虑一个函数fx=X^2+X+1 在面向对象的编程中,我们编写了一个函数,它接受一个参数x并返回计算值。我相信函数编程也是如此。那么它的意思是什么 Treats computation as the eva

我刚刚开始学习clojure,因为它属于函数式编程的一个范畴,所以作为第一步,我要弄清楚它与命令式编程的区别。所以我从维基百科和其他来源学到了一些原始知识。所以我对这句话感到非常困惑

命令式编程中有函数,函数式编程中有数学函数。这里数学函数的确切含义是什么?它与函数有什么不同

从数学上考虑一个函数fx=X^2+X+1 在面向对象的编程中,我们编写了一个函数,它接受一个参数x并返回计算值。我相信函数编程也是如此。那么它的意思是什么

    Treats computation as the evaluation of mathematical functions 
and avoids changing-state and mutable data. 

谢谢你的帮助

数学函数是指当使用相同的输入调用时总是返回相同值的函数。例如,以下不是一个数学函数:

a = 0
def f(x):
  a += 1
  return x + a

因为,当然,如果你用同一个x多次调用它,你会得到不同的值。这是因为f增加了a,这就是所谓的副作用,也是函数式编程应该避免的问题。

这是一个非常广泛的问题。您可能需要阅读以下内容:

在这里的这种情况下,数学函数指的是不产生副作用的特性,例如,在显示器上打印、改变变量或通过网络发送数据包。OO语言中的函数通常会修改状态,它们会更改相应对象实例的值,而在函数语言中则不会

一个数学函数的示例充满了参考透明度,例如,给定相同的输入,它返回相同的输出:

def square(x):
    return x * x
两个非数学函数uu init和increment的示例。这些仍然是函数,但它们正在改变一些东西,例如可变电流_计数:

class Counter:
    def __init__(self):
        self.current_count = 0

    def increment():
        self.current_count += 1