Ответ 1
Порядок оценки слева направо. См. http://clojure.org/evaluation
И оператор, и операнды (если таковые имеются), от слева до вправо.
Указывает ли Clojure порядок оценки аргументов функции?
т.е. Когда я вызываю функцию в Clojure:
(my-func (fun1 arg1) (fun2 arg2) (fun3 arg3))
Определен ли порядок оценки fun1
, fun2
и fun3
?
Я понимаю, что Java определяет порядок оценки аргументов функции слева направо, но я могу представить, что функциональный язык, такой как Clojure, более расслаблен.
Порядок оценки слева направо. См. http://clojure.org/evaluation
И оператор, и операнды (если таковые имеются), от слева до вправо.
Слева направо, но наизнанку (fun1 (fun2 arg2)).
Я думаю, что в целом для функционального языка вы бы хотели избежать ситуации, когда влияют (fun1 arg1) (fun2 arg2) или (fun3 arg3). (fun1 arg1) идеально вернет значение без изменения состояния существующих структур данных в вашей программе.
Следовательно, в зависимости от того, насколько близко вы придерживаетесь стиля функционального программирования, порядок оценки слева направо не имеет значения.
(my-func (fun1 arg1) (fun2 arg2) (fun3 arg3))
my-func имеет arity of 3. Результат (fun1 arg1) будет передан как первый аргумент my-func. И т.д. Затем будет выполняться my-func.
Поэтому порядок оценки аргументов my-func вообще не имеет значения.
Если у вас есть побочные эффекты, тогда, ну, хмммм... Но этот ответ не меняется. Порядок не имеет значения.
Приветствия -