The latest reviewed version was checked on 16 April 2020. There is 1 pending change awaiting review. Official Clojure reference & API : link "Clojure - Functional Programming for the JVM" by R. Mark Volkmann: link Moxley Stratton - "Clojure Tutorial For the Non-Lisp Programmer" : link Satish Talim - "Clojure Notes": link Eric Rochester - "Clojure Series" (deals with tokenization and stemming) : li
今日は、clojureからSQLServerに接続する機会があったので、メモとしてそのコードを残しておく。 まず、起動用のスクリプトを準備: #! /bin/sh # # ファイル名: clojure # clojure起動スクリプト # 引数には、クラスパスに追加するファイルリストを与える CLASSPATH=$CLOJURE_HOME/clojure.jar:$CLOJURE_LIB/clojure-contrib.jar for cp in $@ do CLASSPATH=$CLASSPATH:$cp done java -cp $LIB clojure.lang.Repl 次に起動: $ clojure sqljdbc.jar 残りはclojureコード: (require 'clojure.contrib.sql) (use 'clojure.contrib.sql) ;; DB
Google Waveが。。ということでWaveにためていたClojure関連のリンクを退避。 チュートリアル系 Official Clojure reference & API http://clojure.org/Reference "Clojure - Functional Programming for the JVM" by R. Mark Volkmann http://java.ociweb.com/mark/clojure/ Moxley Stratton - "Clojure Tutorial For the Non-Lisp Programmer" http://www.moxleystratton.com/article/clojure/for-non-lisp-programmers Eric Rochester - "Clojure Series" (deals
Clojureでプログラムを組んでいるうちに、forマクロが強力だということにやっと気づいたので、リファレンスを書いてみる。 forマクロとは 普通の(というか、CやJava系列の)言語では、forはループ文を表すが、Clojureではforマクロはループではなく、シーケンスを作るオペレータだ。 下記のコードでは、0〜9までの数をそれぞれ2倍した数のシーケンス(0, 2, 4, ..., 18)を返す。 (for [x (range 10)] (* x 2)) しかも、返されるシーケンスは遅延シーケンスなので、この式が評価されたときに中身が評価されるのではなく、シーケンスの中身が評価された時に評価される。 => (let [x (for [x (range 3)] (do (println "x=" x) (* x 2)))] (prn "hoge") (prn x)) "hoge" (x
たまたま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
Named parameters You are encouraged to solve this task according to the task description, using any language you may know. Create a function which takes in a number of arguments which are specified by name rather than (necessarily) position, and show how to call the function. If the language supports reordering the arguments or optionally omitting some of them, note this. Note: Named parameters re
      
  Clojureは組み込みではキーワード引数がサポートされてませんが、分配束縛(destructuring)を使うことで同様のことができるようになります。例はにあります。 リンク先にも書いてあるとおり、このパターンをマクロにしたものが、clojure.contrib.defに入っているdefnkです。でも、defnkでは少し物足りないことがあります。 例えば[a :b 1 :c 2 & rest]というように、デフォルト値付きキーワード引数に加えて、さらにオプショナルな引数を取りたい場合はdefnkではうまくいきません。defnkを参考に、オプショナル引数もサポートするdefnk*を書いてみました。 (defn take-while-nth [n pred coll] (lazy-seq (when-let [s (seq coll)] (when (pred (first s)) (con
Twitter4JをいじっているのだがJavaで ConfigurationBuilder confbuilder = new ConfigurationBuilder(); confbuilder.setOAuthConsumerKey(CONSUMERKEY); confbuilder.setOAuthConsumerSecret(CONSMERSECRET); TwitterFactory twitterfactory = new TwitterFactory(confbuilder.build()); twitter = twitterfactory.getOAuthAuthorizedInstance( new AccessToken(ACCESSTOKEN,ACCESSSECRET)); となっているところをClojureでどう書けばいいのか分からず数日停止。 (def con
教科書: Clojure in Action 作者: Amit Rathore出版社/メーカー: Manning Pubns Co発売日: 2011/11/28メディア: ペーパーバック クリック: 24回この商品を含むブログ (2件) を見る マクロ ? Clojureランタイムの動き ソースコード ------> [Read] -------> [Evaluate]まず、リーダーがソースコードをClojureのデータ構造に変換してから、評価されてプログラムが実行される。 マクロは評価される前のデータ構造上で振る舞いを定義することができる関数で、評価される前にプログラムからコードを操作することができる。 ソースコード ------> [Read] --- <macro> ---> [Evaluate] これができると、Clojureに新しい機能を追加することができたりするということ。 u
      
  Clojure | 18:34 | Clojureのマルチメソッドを使っていると、自分で定義した型でディスパッチしたいと思うことがある。しかしdefstructを使ってもうまくいかない。 user> (defstruct Foo :a :b) #'user/Foo user> (struct Foo 1 2) {:a 1, :b 2} user> (class *1) clojure.lang.PersistentStructMap user> (defmulti my-println class) #'user/my-println user> (defmethod my-println Foo [foo] (println "foo")) # user> (my-println (struct Foo 1 2)) ;=> error ; Evaluation aborted. defs
ClojureのAPIリストを眺めていたら面白いマクロがありました。 -> と ->> です。 Rubyのメソッドチェインのようなことができます。 例えば次のようなRubyでの処理は 123456789.to_s.length => 9 ClojureでもJavaのメソッドを直接使う場合は .. でチェインできます。 user> (.. 123456789 toString length) => 9 -> を使えばこれをClojure上の関数で実現できます。 user> (-> 123456789 str count) => 9 123を文字化して逆順にする場合 user> (-> 123 str reverse) => (\3 \2 \1) reverseは文字のシーケンスを返すので user> (->> 123 str reverse (apply str)) => "321" のよ
HTML Cleaner を使って HTMLをWell-Formed XMLに変換する clojure.xml/parse でパース clojure.zip/xml-zip でzipping clojure.contrib.zip-filter と clojure.contrib.zip-filter.xml でscrape xml-> に渡すpredはrootから出発なので、xpathの "//" がしたい場合は descendants を使う。 ただし、ちゃんとtext とか attr とかで止めないと無限リストになる(?) 参考サイト: - HTML Parsing in Clojure using HtmlCleaner - @ infinity, plus 1 - Simple XML Parsing with Clojure at So much to do, so littl
HttpClientを使って、マルチスレッドでWebページを取得するサンプル。 leiningenを使う場合は、project.cljの:dependenciesに[commons-httpclient"3.1"]を記述し、lein depsを実行すればライブラリを取得してくれる。 (ns web-get (:import [org.apache.commons.httpclient HttpClient MultiThreadedHttpConnectionManager]) (:import [org.apache.commons.httpclient.methods GetMethod])) (defn fetch [client url] (let [get (GetMethod. url)] (println (str "Fetching: " url)) (try (let [
Google App EngineのWebアプリをClojureで簡単に作成できるか試してみた。 appengine-magic appengine-magicを使うと簡単そうだな。 https://github.com/gcv/appengine-magic/tree/ Getting Startedに従って、作ってみよう。 Google AppEngine SDKのインストール Python版とJava版があるが、Java版をダウンロードする。 ~/optにappengne-java-sdk-1.4.0を解凍する。 ~/opt/appengine-java-sdk-1.4.0/binにPATHを通す。 Hello,world!を作る まずはHello,world!を作ってみるよ。 プロジェクトの作成 helloプロジェクトを作成する。 $ lein new hello カレントディレク
Clojureではいろんなデータを「シーケンス」として扱います(Clojure - sequences)。だからシーケンスを操作する関数をいろいろ使うことになりますが、ちょっと複雑な操作をしようとすると基本的な関数だけでは足りなくて自分で処理を書くことになります。ところがあとで標準ライブラリをよく読んでみると「この関数使えばもっと簡単に処理を書けたんじゃん! 知らなかったばっかりに(ぐぬぬ」となることもあります。 拡張ライブラリのclojure.contrib.seqはちょっと便利なシーケンス関数をまとめたものですが、ドキュメントをちょっと読んだだけだと使いかたが分かりにくい。そこで各関数の使用例をまとめてみました。これでライブラリにある関数を再発明しないで済むはずだ! gist: 780422 - GitHub rec-seq、rec-catはイマイチ用途が分かってません。 最後のfil
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く