Code Aquarium

minazoko's blog -*- 水底のブログ -*-

Clojure

(Clojure) 標準出力 - オンライン判定コード提出用テンプレその2

前回投稿では標準出力周りが微妙な感じで終わってしまいました。折角なのでどうすれば出力も楽になるか考えてみました。こんなテンプレになりました。 (def in-seq #(line-seq (java.io.BufferedReader. *in*))) (def s->long #(Long/parseLong %)) (defprot…

(Clojure) 標準入力 - オンライン判定コード提出用テンプレ

最近PaizaのオンラインハッカソンやCodeIQの出題コードを問いたりして遊んでいます。 この手のサイトでは標準入出力を使います。 出力はともかく標準入力読み取りを毎回考えて書くのは無駄なのでコピペできるテンプレを用意するのが常套手段のようです。 と…

(ClojurClr) clojure.xml の代替品

clojure clr には何故か未だ clojure.xml が移植されていないようです。JavaのSAX APIと .Net の XML APIがまるっきり異なっているので後回しにされている、といったところでしょうか?代替品もなさそうなので適当に書いてみました。https://gist.github.com…

(Clojure) vsClojureを触ってみた

この記事は Clojure Advent Calendar 2014 - Qiita 15日目の記事です。 まえおき 去る2014/11/12、無償オープンソース版VisualStudio である VisualStudio Community 2013 が公開されました。Pro相当で機能的な制限はなし。となれば、Clojureの.Net版である …

(Clojure)when-let と some->>

タイトルを見て何のことか想像つく人には多分つまらない話です。ついでに nil と seq というキーワードも追加します。おそらく想像通りの内容です。あしからず。 少し長い前置き 前のエントリで逆引き天気予報のプログラムを書きましたが、書いていて何か違…

(Clojure)サーバーにやさしい逆引き天気予報

[追記] tenkijp の rss サービスが終わってしまいました。下記プログラムももう使えません。 はじめに 今更感ありますが、天気予報を取得するプログラムを書いてみました。 コードはこちら データはtenki.jpのこちらから。 ポイント clojure.core.cache で取…

(Clojure)JavaFX2とseesawの連携

JavaFX2には JFXPanel という swing向けのコントロールがあります。 これをswingのJFrameに載せると、swing内で動くJavaFX2アプリが作れます。swingでできるってことは seesawでもできるはずですよね。 というわけで試してみました。「連携」というほどのこ…

それ sequence-m でできるよ

はじめに clojure.algo.monadsを使ってみました。 お題 例えば”Hail2U”という文字列を元にして、["hail2u","hail2U","haiL2u","haiL2U","haIl2u","haIl2U","haIL2u","haIL2U" ,"hAil2u","hAil2U","hAiL2u","hAiL2U","hAIl2u","hAIl2U","hAIL2u","hAIL2U" ,"H…

..

あまりにもぐだぐだな上、誤情報も含まれていたため削除します。

Java 8 を関数型っぽく使うための(中略)をClojureでやってみた

はじめに このエントリーは、Java8のlambda式についてのエントリー派生シリーズへの便乗記事です。まだ下の記事を見ていない方はリンク先を見ておいてください、そうしないと意味がわかりません。 Java 8を関数型っぽく使うためのおまじない - きしだのはて…

(Clojure)短絡評価なsome->マクロ

ぼくのかんがえたスレッディングマクロその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…

clojure.inspectorをちょっとだけ見やすく

(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 …

Clojureでファイルパスの正規化

(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でCSVパーサーを書いてみる

instaparseは文脈自由文法(CFG)による構文解析ライブラリです。ほぼそのままのEBNFと正規表現を使えます。ここでは手ごろなところでCSVの解析器を作ってみます。 leiningenプロジェクト依存モジュール 何はともあれproject.clj。最低限必要なライブラリは以…

some->でヌルポ回避

どってことないことですが、ふと気づいた。 (when-not (nil? obj) (.method obj)) は (some-> obj .method) と書けば短いしobjの出現を一回だけにできるね。*1 *1:もしかして常識だったり?

Emacs Lisp で as-> マクロ

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…

Clojure1.5 の New Thread Macro

Githubを眺めていたらClojure1.5でcoreに追加される新しいスレッドマクロが目にとまりました。スレッドマクロ大好きなのでちょっと気になり試してみました。 ● as-> これが一番分かりやすく出番もありそうです。 (require '[clojure.string :as string]) (as…

Clojure-Pyでファイルリード

●テキストファイルを読む 行単位で遅延リードしてテキスト処理。 ファイル終了判定は空文字列との一致判定。pythonのreadlineは行末に改行をくっつけたまま読み込むのでファイル終端でなけれな空行でも空文字列にはならない。 (defn repeatedly [f] (lazy-se…

Clojure-PyでWin32API

Clojureからネイティブライブラリ Pythonにはctypesというネイティブライブラリをダイレクトに扱うモジュールがあります。ということはClojure-Pyを使うとClojureからネイティブが呼べるということになりますね。 ;;-*- coding:utf-8 -*- (ns sample-ctypes …

ClojureのスレッドマクロをSchemeで

Clojureのマクロ -> と ->> のScheme版です。動作確認はRacketでしましたが、syntax-rulesしか使ってないので他の処理系でも動くかな? apply->とapply->>は補助用のヘルパマクロです。似たような構造が並んでいるので共通部分を共通化することも考えました…

Clojureで掛け算テーブル

お題はこちら 書きました。少し冗長でしょうか。 条件文はあえて言葉足らずに書きました。「負の数を含めるのか?」という疑問が出ると思いますがそこは各々の判断に任せました。条件に忠実にしたがえば負の数も範囲にはいるはずですが。 ->> 簡単に解説 mak…

ClojureでJavaのpackage-info.javaを一括生成

少し前のネタですが twitter TLで見かけたので書いてみました。 お題: http://npnl.hatenablog.jp/entry/2012/08/17/014930 出力ファイルの文字コード指定可能 パスセパレータはシステム値からとるのでOS非依存。 改行コードもシステムプロパティから取得(…