2014-01-01から1年間の記事一覧

アナフォリックマクロを作ってみる

Elixir Advent Calendar 2014 16日目。またマクロのネタを。 On Lispでは、Common LISPの力の例として、アナフォリックマクロが紹介されている。elixirでも、アナフォリックマクロを作ってみよう。 アナフォリックマクロとは アナフォラ(anaphora)というのは…

[elixir] マクロを使ってloop/recurを実装してみる

Elixir Advent Calendar 2014 7日目の記事。前日は@keithseahusさんの 去年のやつをv1.0仕様で書き直します だった。 loop/recurとは何? 最近からelixirを始めた人にはピンとこないかもしれないが、elixir-0.5あたりでサポートされていた、無名関数を使わず…

elixirプロトコルについて(Enumerable)

elixirでは標準でいくつかのプロトコルを提供しているが、あまり目立っていない。そこで、モジュールではなくプロトコルに着目して調べてみた。 Enumerable Enumerableとは、「数え上げることができる」という意味で、主にEnum、StreamモジュールがEnumerabl…

elixir地域化の話: アプリケーションのロード

地域化の話ではあるけれど、Elixir/Erlangのコードローディングとアプリケーションの話でもある。 地域化の基本設計の段階で、翻訳リソースはアプリケーション毎(OTPでいうところのアプリケーション)に決定した。 ところが、Code.get_docs/2では、モジュール…

elixir地域化の話その2

前回のExgettextは、ビルドが面倒だったり、mixのdepsへ入れると うまく連動しないとか不満があったので、その辺を整備してみました。 不満1 mix depsに入れるとexmoがビルドされない 当たり前で、deps.compileではMix.Tasks.Compileが呼ばれます。Mix.Tasks…

[elixir] Elixir地域化の話

依然として開発が活発なElixirですが、日本語のサポートが欲しいと思って、地域化のパッケージを作成してみました。国際化/地域化パッケージと言えばGNU gettextですので、できるだけGNU gettextを使うようにしました。 Exgettext 地域化するためにはまず、 …

[elixir][erlang] erlang/OTP-R17とelixir

やっとerlang/OTP-R17がリリースされました。UTF-8の全面採用、mapsデータ型の(実験的)サポート、名前つき無名関数など盛りだくさん。 Maps -- Records are dead, long live maps! いわゆるperlでのハッシュがやっと実装された。これまではproplistモジュー…

無名関数での再帰処理

elixirでの無名関数はfnスペシャルフォームで定義できるが、無名関数のため、自分自身を呼び出すような処理は記述できない。 たとえば、フィボナッチ数を求める関数は、 fn (0) -> 0 (1) -> 1 (n) -> self(n-1) + self(n - 2) のように書くことは出来ない。 …