タグ

2016年7月28日のブックマーク (4件)

  • How does one start a thread in Clojure?

    piro_suke
    piro_suke 2016/07/28
  • Clojureの並列処理関連の関数 - CLOVER🍀

    Clojureで並列・並行処理といえばSTMやエージェントが有名だと思いますが、お手軽な関数も用意されているみたいなので、調べてみました。 pmap map関数の並列版です。与えたシーケンスに対して、関数を並列に適用してくれます。 (time (println (let [sleep-and-double (fn [v] (Thread/sleep 3000) (* 2 v))] (pmap sleep-and-double (range 1 6))))) ;; => (2 4 6 8 10) "Elapsed time: 3058.024539 msecs" (shutdown-agents) 少し前にこの関数を使ったエントリを書きましたが、どうもシーケンスの数だけスレッドが起動するっぽいので、その点は注意が必要そうです。 あと、裏でエージェントを使っているようなので、shutdown-

    Clojureの並列処理関連の関数 - CLOVER🍀
    piro_suke
    piro_suke 2016/07/28
  • clojureでスレッド - エンジニアですよ!

    http://stackoverflow.com/questions/1768567/how-does-one-start-a-thread-in-clojure Clojure fns are Runnable clojureでは関数はRunnableなんですね!! 便利!! リンク貼ったstackoverflowに書いてあるようにfnで作った関数でも、もちろんdefnでも一緒 user=> (defn f [] (println "clojure!")) #'user/f user=> (.start (Thread. f)) nil user=> clojure! これだけで定義した好きな関数を別スレッドで動かせる。便利。 以下、補足 ちなみに最初見た時わからなかったけど、.startはjavaの関数呼び出す時の書き方。 clojureプログラミング入門-5 Javaの呼び出し -

    clojureでスレッド - エンジニアですよ!
    piro_suke
    piro_suke 2016/07/28
  • Clojureの正規表現 - 水底で思うこと

    以下全て、Clojure1.1.0 をベースにしています。 【正規表現オブジェクト】 正規表現(pattern)オブジェクトの作成方法は3通りあります。 ;; どれでも結果は同じ。 ;; javax.util.regex.Patternオブジェクトが生成される。 (def re #"[\da-f]+") (def re (re-pattern "[\\da-f]+")) (def re (java.util.regex.Pattern/compile "[\\da-f]+")) リテラルで書きたい場合は一つめ、文字列から生成したい場合は二つめの書きかたを使うのが良さそう。 なおリテラルで書くとraw string扱いになりますが、re-patternでは通常の文字列なので \d のようなパターンを書く時 \\d とエスケープが必要になります。 【探索】 ●re-find re-find は

    Clojureの正規表現 - 水底で思うこと
    piro_suke
    piro_suke 2016/07/28