2011-01-27 21 views
12

Clojureは関数引数の評価順序を指定していますか?Clojureの関数引数の評価順序

I.e.私はClojureの中で関数を呼び出すとき:

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

fun1fun2、およびfun3の評価の順序は定義されていますか?

私は、Javaが関数の引数の評価の順序を左から右に定義していることを理解していますが、Clojureのような関数型言語はよりリラックスしていると思います。

答えて

13

評価の順は、右から左です。 http://clojure.org/evaluation

オペレータとオペランド 両方を参照して(もしあれば) 左から右に評価されます。

+4

それは '((FUN1の引数)(fun2の引数)(fun3のargは))'すべて 'funN'関数が呼び出されることになりますことを確認するためにリンクしているから面白い、前に'の結果に(fun1 arg) 'が関数型にキャストされている可能性があります。 – pauldoo

10

左から右にも、同様に(fun1(fun2 arg2))。

私は、一般的に関数型言語の場合、(fun1 arg1)(fun2 arg2)または(fun3 arg3)に影響を与える状況を避けたいと考えています。 (fun1 arg1)は、プログラムの既存のデータ構造の状態を変更することなく、理想的には値を返します。

したがって、関数型のプログラミングスタイルをどれだけ近づけても、左から右の評価順序は重要ではありません。

がmy-funcが3のアリティを持つhttp://clojure.org/state

+2

あなたのプログラムが良いFPスタイルで書かれていれば、それは問題ではありません。 – mikera

1

(私の-FUNC(FUN1 arg1の)(fun2のARG2)(fun3のARG3))

(FUN1 arg1の)の結果として渡されます見ますmy-funcの最初の引数。その他、my-funcが実行されます。

したがって、my-funcへの引数の評価の順序はまったく重要ではありません。

副作用がある場合は、まあ、うーん...しかし、この答えは変わりません。順序は関係ありません。

乾杯 -