Clojure中函数参数的评估顺序

pau*_*doo 12 clojure

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

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

(my-func (fun1 arg1) (fun2 arg2) (fun3 arg3))
Run Code Online (Sandbox Code Playgroud)

是评价的顺序fun1,fun2fun3界定?

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

Hei*_*upp 13

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

从左到右评估运算符和操作数(如果有).

  • 有趣的是从链接看到`((fun1 arg)(fun2 arg)(fun3 arg))`将导致所有`funN`函数被调用,之后``(fun1 arg)`的结果被强制转换为a功能类型(可能不是). (4认同)

小智 10

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

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

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

http://clojure.org/state

  • 如果您的程序是以良好的FP风格编写的,那么这个洞察力+1,应该无关紧要.... (2认同)