タグ

trampolineに関するishideoのブックマーク (2)

  • trampolineのデバッグ方法について

    clojure 1.8 を使っています。 特にIDEなどは使っておらず、mifesやときどきvimでコードを書いておりまして、javaコマンドから直接REPL起動させ、実行結果を試しています。 純粋関数をなるべく多用することで大分デバッグが楽になったと感じているのですが、trampolineを使うときは引数に指定された関数が返してくる関数をさらに実行しながら進むので、動的に関数の実行順序や関数に渡すデータが変わっていきます。そういう状況ではprintlnくらいでしかデバッグの方法が分かりませんでした。 しかしこの方法は do 関数に println をいくつも書いたりしなくてはならなくなって、括弧の数も多くなりがちです。可読性が大分悪くなってしまいました。 もしきちんとプログラムを組むのであれば、こういう類をメンテナンスしていくのは正直辛くなってしまいそうです。しかしそんなことを多くの人が

    trampolineのデバッグ方法について
  • 重箱の隅的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