Clojure中函数参数的评估顺序

时间:2011-01-27 10:50:26

标签: clojure

Clojure是否指定了函数参数的评估顺序?

即。当我在Clojure中调用函数时:

(my-func (fun1 arg1) (fun2 arg2) (fun3 arg3))

是否定义了fun1fun2fun3的评估顺序?

我理解Java定义了从左到右的函数参数的评估顺序,但我可以想象像Clojure这样的函数式语言更加轻松。

3 个答案:

答案 0 :(得分:13)

评估顺序是从左到右。见http://clojure.org/evaluation

  

运算符和操作数   (如果有的话)从左到右进行评估   右。

答案 1 :(得分:10)

从左到右,但也在里面(fun1(fun2 arg2))。

我认为通常对于函数式语言,你会想要避免(fun1 arg1)影响(fun2 arg2)或(fun3 arg3)的情况。 (fun1 arg1)理想情况下会返回一个值,而不会改变程序中现有数据结构的状态。

因此,根据您对函数式编程风格的接近程度,从左到右的评估顺序并不重要。

请参阅http://clojure.org/state

答案 2 :(得分:1)

(my-func(fun1 arg1)(fun2 arg2)(fun3 arg3))

my-func的arity为3.(fun1 arg1)的结果将作为my-func的第一个参数传递。等等。然后my-func将被执行。

因此,对my-func的参数的评估顺序根本不重要。

如果你有副作用,那么,嗯,嗯...但这个答案并没有改变。订单无关紧要。

干杯 -