Clojure中副作用的含义

The meaning of side-effect in Clojure

我在思考 Clojure 中副作用的含义。 Clojure 中的副作用到底是什么?谁能举个例子解释一下?

任何编程语言的一个副作用是所做的一切在提供的参数和返回的结果之间没有直接关联。

(+ 3 4)      ; ==> 7 (result is always a mapping between arguments and result. It will always be 7 no matte rhow many times you do it. 
(rand-int 4) ; ==> 0,1,2, or 3. You have no idea what it will produce next. 

第一个表达式是函数式的。您可以使用它的结果查找所有不同的两个值 table,您不会知道其中的区别。

第二个可能会针对相同的参数给出不同的结果。计算必须基于其他东西,比如内部状态,而不仅仅是参数。它有副作用。

程序中使用的典型副作用是 I/O 和对象突变。