タグ

ブックマーク / trotr.hatenadiary.org (4)

  • clojureの再帰とスタックオーバーフロー(remove-first) - trotrの日記

    たまたまcljureのMLを見ていた時に、nickiktさんという人が 「"scheme-remove-first"という関数を 書いたのだけれど、自分の実装ではstack overflowしてしまうので気に入らない。 誰かだれかもっと良いバージョンを書いてみてくれ https://groups.google.com/group/clojure/browse_thread/thread/9e400d1381b11665?pli=1 というようなことを書いていたメールを発見しました。 scheme-remove-firstでやりたいことはこんな感じです。 (remove-first 2 '(1 2 3 1 2 3 1 2 3)) ; => (1 3 1 2 3 1 2 3) 名前の通りですね。 実際にnickiktさんが書いた関数はこんな感じでした。 remove-first (defn r

    clojureの再帰とスタックオーバーフロー(remove-first) - trotrの日記
  • trotrの日記

    gistに書けば良かったかも。 listを一連の流れの連鎖ではなく候補からの選択と捉えてみると、別な形のマクロが思い浮かぶ。 (やり過ぎ良くない…ただ、実験ということで) 例えば、こんな感じ。clojureの->,->>にならい、初期値を取りそれをもとに選択を行うようになっている。 (define (f x p val) (and (p x) val)) (define (QandA Q) (@maybeL Q (f symbol? 'symbol) (f integer? 'int) (f list? 'list) (f identity 'unknown))) (map QandA '(10 aa (aa) #(aa))) ; => (int symbol list unknown) 他の構文とは異質なものなので、それをはっきりさせるために@をつけている。 code (use util

    trotrの日記
  • 2010-02-28

    プログラミングclojureは読み物としては面白いのですが、実際に自分でclojureのコードを書こうとするとすこし手間取ってしまいます。*1 ファイルIOもそのようなうちのひとつなのですが、clojureでのファイルIOについて少し調べてみました。 とりあえず以下のことができれば十分そうです。 ファイルを開いて(何か処理して)閉じる 1行読み込めれば十分 ファイルの中身をstreamとして取り出す あとはファイルへの出力の方もできればいいですね。 1行だけ読み込んでファイルをcloseする よく分からないですけど、javaではBufferedReader FileInputStream InputStreamReaderを使うのが普通みたいです。 javaのコードをべたにclojureで書いた後に、clojureで利用できる関数を使って短くしていこうと思います。 (面倒だったら、最後の部

    2010-02-28
  • 2010-02-27

    合っているのか自信がないのでblogに貼るだけにしておく 今のところ 文字のリスト(sequence)から文字列を作成する上手い方法が見つかっていない。 暫定的な対応策は以下 (defn cs-to-str [cs] (String. #^"[C" (into-array Character/TYPE cs))) 文字列を結合する (str "foo" "bar") ; => "foobar" 大文字・小文字に揃える (. "Hi, Clojurian" toUpperCase) ; => "HI, CLOJURIAN" (. "Hi, Clojurian" toLowerCase) ; => "hi, clojurian" 大文字と小文字を入れ替える (defn swap-case [str] (cs-to-str (map #(cond (Character/isUpperCase %

    2010-02-27
  • 1