clojure

「Clojureシンタックスハイライター開発から考えるこれからのLispに必要なもの」を発表しました

7/27に開かれたLisp Meetup #30で「Clojureシンタックスハイライター開発から考えるこれからのLispに必要なもの」というタイトルで話してきました。 Clojureシンタックスハイライター開発から考えるこれからのLispに必要なもの from sohta 内容としては、去…

Clojure夜会でLT発表してきた

もう1週間以上経ってしまったけど、10/10に開かれたClojure夜会に参加してきた。 Clojure 夜会(Evening Party) - Clojure大好き! | Doorkeeper 平日の夜から(しかも東京で)のイベントだったので最初は参加は難しいなぁと思っていたのだけど、休みがギリギリ…

CodeIQ プログラミング言語☆総選挙の問題をClojureで

先月、CodeIQでプログラミング言語総選挙なるものをやってました。CodeIQ プログラミング言語★総選挙|CodeIQ内容はおおむね、各人が好きな言語へ投票して言語ごとの得票数を競うものでした。まず予備選挙をやって、上位の8言語だけが本選挙に勝ち上がれると…

tools.macroを使ってLet Over Lambdaのパンドリックマクロを実装する

(このエントリは Clojure Contrib Library Advent Calendar 18日目の記事です。) はじめに 今回のネタはtools.macroです。 tools.macroは,ライブラリのREADMEによれば「マクロを書くためのツール」という位置づけで,現在提供している主要な機能はmacrolet…

data.priority-mapを使ってダイクストラ法で迷路を解く

(このエントリは Clojure Contrib Library Advent Calendar 14日目の記事です。) はじめに 今回はdata.priority-mapについてです。以前はclojure.contrib.priority-mapと呼ばれていました。 data.priority-mapは優先度つきマップ(priority map)の実装を提供…

data.finger-tree: フィンガーツリー

(このエントリは Clojure Contrib Library Advent Calendar 13日目の記事です。) はじめに 今回はdata.finger-treeについてです。data.finger-treeは名前が示すとおり,フィンガーツリーの実装を提供します。Wikipediaによれば,フィンガーツリーは以下のよ…

core.rrb-vector: 新しいベクタの実装

(このエントリは,Clojure Contrib Library Advent Calendar 12日目の記事です。) はじめに 今回のネタはcore.rrb-vectorです。core.rrb-vectorは2013年1月にContribライブラリに入った比較的新しいライブラリです。 core.rrb-vectorが提供するのは,新しい…

tools.loggingを使ってSLF4J+Logbackでログをとる

(このエントリは, Clojure Contrib Library Advent Calendar 9日目の記事です。) 概要 今日紹介するライブラリはtools.loggingです。tools.loggingは,Javaで実装されたいくつかのロギングライブラリを,共通したインタフェースでClojureから使えるようにす…

tools.traceで実行トレースをとる

(このエントリは Clojure Contrib Library Advent Calendar 7日目の記事です。) 概要 今回はtools.traceについてです。tools.traceは実行トレースをとるのに便利な関数/マクロを提供するライブラリです。標準でデバッグ機能が弱いClojure上での開発で,シン…

data.jsonでJSONの読み書き

(このエントリは Clojure Contrib Library Advent Calendar 3日目の記事です。) はじめに 3日目の今日はdata.jsonについてです。 data.jsonは名前が示すとおり,JSON形式の読み書きをするために使います。以前はclojure.contrib.jsonという名前でした。ひと…

Clojure Contrib ライブラリとは

今年も残すところ1ヶ月となり,恒例のアドベントカレンダーの季節がやってきました。このエントリは,Clojure Contrib Library Advent Calendar 2013 の第1日目の記事です。今回は,Contribライブラリの概要について説明します。 contribライブラリとは そも…

CodeIQのRestricted Words問題をClojureで

CodeIQで次のような問題(通称「Restricted Words」問題)が出されていました。 標準出力に Hello World と出力するプログラムを作成して下さい。ただし、数値、文字及び文字列リテラルを解答に含めることはできません。 Perlのqqやqw、Rubyの%Q、%q、%wなども…

Clojureコンパイラの型推論器をとりだしてみる

clojure.orgには,Clojureについて次のような説明がある。 Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection. http://clojure.org/ この型推論(type…

gorubyライクな短縮形をClojureで

(このエントリはLisp Advent Calendar 2012 8日目の記事です。) gorubyとは gorubyはRubyに標準でついてくる、ゴルフ用のRuby処理系です。ゴルフ用というだけあって、普通のRubyに追加でゴルフに都合のいい機能をいくつかもっています。そのひとつに、「メソ…

Clojure(ある意味)基礎文法最速マスター

(このエントリはLisp Advent Calendar 2012 1日目の記事です。) はじめに 2年ほど前に、「◯◯言語基礎文法最速マスター」という、それぞれの言語の基本的な文法を説明したブログ記事を書くのが大流行した時期がありました。その流行り具合は、まとめ記事にま…

Clojureでsyntactic closureを使ってhygienic macroを書くためのライブラリを作りました

という話。当初は実現可能性を示すことを目的にしていましたが、それなりに実用できそうな感じになってきたのでライブラリとしてまとめました。 athos/syntactic-closure · GitHub syntactic-closure 0.1.0 - Clojars hygienic macroとは? syntactic closur…

真・自然言語プログラミングの"the"演算子をClojureで

みなさん、明けましておめでとうございます。今年もよろしくお願いします(遅 さて、今回のネタは"the"演算子をClojureで実装してみたという話。"the"演算子といってもCommon Lispのtheではありません。 2年半ほど前に、FLTV(Future Language TV)という未来の…

重箱の隅的Clojureのイケてないところ

この記事はClojure Advent Calendar 2011 4日目の記事です。 Clojureには,シーケンスや組み込みのイミュータブルなコレクション型,STMなどエレガントだといわれる様々な特徴がある。一方で,ときにプログラマを悩ませるような厄介な挙動や不自由さを感じる…

Clojure 内部で使われる中間形式 Expr について分かったこと

最近,暇を見つけてClojureのコンパイラを読んでいる。まだよく分かっていない部分もたくさんあるけれど,今まで読んできた中で分かったこと,特にClojureの内部で使われている "Expr" という中間形式についてまとめておく。 Expr って何? Clojureの内部で…

Nailgun/GroovyServを使ってClojureの起動を高速化する

JVM上で動作する言語(処理系)にはよくある話だけれど,Clojureの起動は遅い。下の結果は手元の環境で実行した場合の例。 $ repeat 5 time java clojure.main -e '(println "Hello, Clojure!")' Hello, Clojure! java clojure.main -e '(println "Hello, Cloj…

「ClojureでJavaクラスのコンストラクタをapplyする」をリフレクションで

元ネタは1年前の記事。 ClojureでJavaクラスのコンストラクタをapplyする - 水底で思うこと 解決方法 -> ClojureでJavaクラスのコンストラクタをapplyする - 地獄の猫日記 ClojureからJavaのコンストラクタを呼ぶ場合, (new Hoge foo bar) または (Hoge.…

ぷよぷよ19連鎖の問題を Clojure で

去年、迷路を最短経路で解く問題を出題していたところが、今年も採用一次試験の問題を公開しているというのでClojureで解いてみた。 問題は以下のとおり。 ゲーム「ぷよぷよ」で、フィールドの状態がテキストで与えられたとき、消える「ぷよ」を消して次のフ…

暗黙の引数 &env を使ってスコープを曲げてみる

昨日に引き続き、Clojureマクロの暗黙の引数&envについて。&envを通してマクロ呼び出しのフォームを囲む環境が手に入るわけで、これを利用しておもしろいことはできないだろうか。そう考えているうちに、スコープを曲げる - 主題のない日記で出てきた例を思…

マクロの暗黙の引数 &form と &env

Varの適用 Clojureでは、たとえば (#'list 1 2 3) が (list 1 2 3) と同じ結果を返す。Varに関数が束縛されている場合には、Varに束縛されている関数がそのまま適用されるようだ。では、Varにマクロが束縛されている場合にはどうなるだろう?マクロを展開し…

gaucheyライブラリ

今日はShibuya.lispのHackathonがあったようです。東京には行けなかったんですが、時間中(13:00 - 17:30)は時間をとってリモートで勝手に参加させてもらってました。時間中はひたすらClojureを書いていました。gaucheyという、Gaucheにバンドルされたライブ…

迷路を最短経路で解く問題を Clojure で

Clojure といえば、巷ではProgramming Clojureの日本語訳である「プログラミング Clojure」の献本が行われているようで、これが発売すればいよいよ日本でも本格的に Clojure が広まっていくんじゃないでしょうか。というわけで、スタートダッシュ(というかフ…

噂の「英単語を覚えるスクリプト」をClojureで

第1回 Scheme コードバトンのお知らせ - Higepon’s blogでネタとして挙がっている英単語を覚えるスクリプトをClojureで書いてみた、という話。コード自体はid:higeponさんのScheme(R6RS)版をほぼそのままClojureに移植しただけ。 ソースコード (追記:ソース…