Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

clojureとloopに関するishideoのブックマーク (2)

  • Clojure :: recurが意味分からないという人のための簡単な再帰講座 - Line 1: Error: Invalid Blog('by Esehara' )

    この記事は、Clojure Advent Calender 2013 (全部俺) 2日目です。 定期的にClojureのタイムラインを見ていたりするのですが、どうやら皆が引っかかりやすい部分の一つとして、どうやらrecurという存在があるようです。recurとは、loopと対応して、再帰的な構造を擬似的に作り出すための構文です。例えば、1から100を出力するための関数を、loopとrecurで書くと、下のような構文になるでしょう。 (defn one-to [] (loop [x 1] (if (> x 100) nil (do (println x) (recur (+ x 1)))))) さて、このように強力なループを生成するloopとrecurの構文なのですが、しかしどうやらClojureのタイムラインを見ていると、このrecurについて躓いてしまう人が多い印象を感じます。 そこで、

    Clojure :: recurが意味分からないという人のための簡単な再帰講座 - Line 1: Error: Invalid Blog('by Esehara' )
  • 重箱の隅的Clojureのイケてないところ - Homoiconic Days

    この記事はClojure Advent Calendar 2011 4日目の記事です。 Clojureには,シーケンスや組み込みのイミュータブルなコレクション型,STMなどエレガントだといわれる様々な特徴がある。一方で,ときにプログラマを悩ませるような厄介な挙動や不自由さを感じる制約も結構あったりする。 今回は,僕がClojureを使い始めてから2年ちょっとの間に遭遇した,そういったClojureの"イケてない"部分のうち,現在の最新バージョン(v1.3.0)でも見られるものについてまとめてみた。 ネストしたloopをうまく扱えない ClojureはJVM上で実行されるため,(今のところ)末尾呼び出しが最適化されない。末尾再帰(ループ)を使いたい場合にはloop - recurを使う。たとえば,階乗を計算する関数factはloopを使って下のように定義できる。 (defn fact [n]

    重箱の隅的Clojureのイケてないところ - Homoiconic Days
  • 1