2009-07-29 10 views

答えて

37

私が必要とするのは、ローカル機能または2 ...または3 ...私はそれらをletfnします。関数と非関数を混在させる必要がある場合は、通常のletを使用します。 letfningとlettingはこれを行うための非常に冗長な方法です。

ただし、ローカル関数を使って相互再帰が必要な場合は、どちらかの方法でletfnを実行する必要があります。

短いバージョン:見た目がよく見えるときや便利なときに使用します。いずれかを使用するための厳密で速い規則はありません。それらはClojureツールボックスの単なるツールです。

楽しくお楽しみください!

18

通常、それはletを使いやすくし、すっきりです:あなたは、単一の形で両方の機能と非機能のセットを定義し、さらに以前の定義に戻って参照することができ、そのよう:

(let [f  (fn [x] ....) 
     value (reduce f some-collection) 
     foo bar] 
    .....) 

letfnは本当にありますあなたがお互いを再帰的に参照する複数の関数を定義したいときにのみ必要です。 letは再帰参照をサポートしていないため、この場合は機能しません。

+0

単純な再帰(本体が使用する関数)であっても、letfnが必要であることに注意してください。 – fmjrey

+3

関数はこのようにして自身を参照できます。 '(fn foo [x] ....(foo ...)...)' – mikera

+0

はい、本当に! let形式では、同じfn(letバインディングでは1つの名前、fn形式では1つの名前)または同じ名前を2回繰り返すので、letfnはより良いかもしれません。 – fmjrey

関連する問題