Clojure
前回投稿では標準出力周りが微妙な感じで終わってしまいました。折角なのでどうすれば出力も楽になるか考えてみました。こんなテンプレになりました。 (def in-seq #(line-seq (java.io.BufferedReader. *in*))) (def s->long #(Long/parseLong %)) (defprot…
最近PaizaのオンラインハッカソンやCodeIQの出題コードを問いたりして遊んでいます。 この手のサイトでは標準入出力を使います。 出力はともかく標準入力読み取りを毎回考えて書くのは無駄なのでコピペできるテンプレを用意するのが常套手段のようです。 と…
clojure clr には何故か未だ clojure.xml が移植されていないようです。JavaのSAX APIと .Net の XML APIがまるっきり異なっているので後回しにされている、といったところでしょうか?代替品もなさそうなので適当に書いてみました。https://gist.github.com…
この記事は Clojure Advent Calendar 2014 - Qiita 15日目の記事です。 まえおき 去る2014/11/12、無償オープンソース版VisualStudio である VisualStudio Community 2013 が公開されました。Pro相当で機能的な制限はなし。となれば、Clojureの.Net版である …
タイトルを見て何のことか想像つく人には多分つまらない話です。ついでに nil と seq というキーワードも追加します。おそらく想像通りの内容です。あしからず。 少し長い前置き 前のエントリで逆引き天気予報のプログラムを書きましたが、書いていて何か違…
[追記] tenkijp の rss サービスが終わってしまいました。下記プログラムももう使えません。 はじめに 今更感ありますが、天気予報を取得するプログラムを書いてみました。 コードはこちら データはtenki.jpのこちらから。 ポイント clojure.core.cache で取…
JavaFX2には JFXPanel という swing向けのコントロールがあります。 これをswingのJFrameに載せると、swing内で動くJavaFX2アプリが作れます。swingでできるってことは seesawでもできるはずですよね。 というわけで試してみました。「連携」というほどのこ…
はじめに clojure.algo.monadsを使ってみました。 お題 例えば”Hail2U”という文字列を元にして、["hail2u","hail2U","haiL2u","haiL2U","haIl2u","haIl2U","haIL2u","haIL2U" ,"hAil2u","hAil2U","hAiL2u","hAiL2U","hAIl2u","hAIl2U","hAIL2u","hAIL2U" ,"H…
あまりにもぐだぐだな上、誤情報も含まれていたため削除します。
はじめに このエントリーは、Java8のlambda式についてのエントリー派生シリーズへの便乗記事です。まだ下の記事を見ていない方はリンク先を見ておいてください、そうしないと意味がわかりません。 Java 8を関数型っぽく使うためのおまじない - きしだのはて…
ぼくのかんがえたスレッディングマクロその2 評価がnilになったら即抜けるsome->とsome->> (ns cool-macros (:refer-clojure :exclude [some-> some->>])) (defmacro ^:private some->* [form & exprs] (let [[e-first & exprs] exprs [e-last & exprs] (re…
(require '[clojure.inspector :as insp]) (import 'java.awt.Font) (defn find-children [^java.awt.Component co ^Class cls] (some->> co .getComponents (filter #(instance? cls %)))) (defn custom-inspect-tree [data] (let [font (Font. "VL Gothic"…
cond-> も as-> みたいにシンボルを指定できたらいいと思いました。 (defmacro cond-as-> [init name & forms] (when-not (even? (count forms)) (throw (IllegalArgumentException. "require an even number of forms"))) (if-not forms init `(let [~name …
(def user-home-path (System/getProperty "user.home")) (defn get-canonical-path [^String path] {:pre [path]} (-> (cond-> path (.startsWith path "~") (.replaceFirst "~" user-home-path)) java.io.File. .getCanonicalPath)) ClojureというかJavaの…
instaparseは文脈自由文法(CFG)による構文解析ライブラリです。ほぼそのままのEBNFと正規表現を使えます。ここでは手ごろなところでCSVの解析器を作ってみます。 leiningenプロジェクト依存モジュール 何はともあれproject.clj。最低限必要なライブラリは以…
どってことないことですが、ふと気づいた。 (when-not (nil? obj) (.method obj)) は (some-> obj .method) と書けば短いしobjの出現を一回だけにできるね。*1 *1:もしかして常識だったり?
Clojure1.5のas->マクロをelispで。 (defmacro as-> (expr name &rest forms) `(let* ((,name ,expr) ,@(mapcar '(lambda (f) `(,name ,f)) forms)) ,name)) 本家Clojureの実装はこんな感じ (defmacro as-> [expr name & forms] `(let [~name ~expr ~@(inter…
Githubを眺めていたらClojure1.5でcoreに追加される新しいスレッドマクロが目にとまりました。スレッドマクロ大好きなのでちょっと気になり試してみました。 ● as-> これが一番分かりやすく出番もありそうです。 (require '[clojure.string :as string]) (as…
●テキストファイルを読む 行単位で遅延リードしてテキスト処理。 ファイル終了判定は空文字列との一致判定。pythonのreadlineは行末に改行をくっつけたまま読み込むのでファイル終端でなけれな空行でも空文字列にはならない。 (defn repeatedly [f] (lazy-se…
Clojureからネイティブライブラリ Pythonにはctypesというネイティブライブラリをダイレクトに扱うモジュールがあります。ということはClojure-Pyを使うとClojureからネイティブが呼べるということになりますね。 ;;-*- coding:utf-8 -*- (ns sample-ctypes …
Clojureのマクロ -> と ->> のScheme版です。動作確認はRacketでしましたが、syntax-rulesしか使ってないので他の処理系でも動くかな? apply->とapply->>は補助用のヘルパマクロです。似たような構造が並んでいるので共通部分を共通化することも考えました…
お題はこちら 書きました。少し冗長でしょうか。 条件文はあえて言葉足らずに書きました。「負の数を含めるのか?」という疑問が出ると思いますがそこは各々の判断に任せました。条件に忠実にしたがえば負の数も範囲にはいるはずですが。 ->> 簡単に解説 mak…
少し前のネタですが twitter TLで見かけたので書いてみました。 お題: http://npnl.hatenablog.jp/entry/2012/08/17/014930 出力ファイルの文字コード指定可能 パスセパレータはシステム値からとるのでOS非依存。 改行コードもシステムプロパティから取得(…