2011-12-16 13 views
4

を実行せずにClojureの将来の作成:私は、ファイルをexecure場合それは私が含む基本的なClojureのスクリプト持っ

(def test 
    (future 
     (loop [] 
      (println "Running") 
      (recur)))) 

しかし、:

java -cp clojure-1.3.0.jar clojure.main test.clj 

すると画面が「実行中」で埋めます。私はそれを変更することができますので、将来私はそれが欲しいときに実行されますか?

注:これは永遠に実行されることを認識しています。これは単なる問題の例です。

答えて

10

すぐに実行されない未来は、引数のない関数に過ぎません。

ので:

(defn test [] 
    (println "Running") 
    (recur)) 

...その後...

(future (test)) 
+0

すばらしい、ありがとう:DIはまた、あなたが(ループ[] ...)を残すことができる実現しませんでした関数が引数を必要としない場合 –

+0

この回答はとても禅です。 –

+2

@DeanBarnes 'recur'は最も最近の再帰アンカーポイントに戻ります。反復アンカーポイントになる言語で定義されている2つのものは 'loop'と' fn'ですので、あなたの関数頭と異なる点に、あるいは別の束縛で再帰させたい場合は 'loop'が必要です。 – amalloy

関連する問題