fc2ブログ

t100のプログラミング脱出作戦

自分のプログラミング脳をプログラムにして、いつかプログラミングから脱出してやるぞっ!とか夢見ながら、日々プログラム作っていく 百野 貴博 の日記です!今は、屋号『百蔵。』として、Silverlight・WPFを追跡中です! (2007/09/30)
Clojureの"->"マクロ(右矢印みたいなやつ)
Clojureのサンプルコードを見ていたら、時々 (-> xxx yyy) みたいなコードに出会うことがあります。

これ、、、なんですのん。ヽ(;´д`)ノ


プログラミングClojure本にも書いてないし、グーグル先生に聞こうにも記号だからうまく検索できな、、、
と思ったら、「Clojure arrow」 のキーワードで遂に解説ページを発見!(・∀・)わーい

Understanding the Clojure -> macro

どうも、関数を連続で呼び出す為のマクロみたいです。
上記ページをかいつまむと、こんな感じです。


例えば、こんな式があったとします。

(-> (Math/sqrt 25) int list)



これは、次のように解釈されます。

1.(Math/sqrt 25) が実行されます。 25 の平方根で、5.0 が戻り値です。(`・ω・´)9m
2.int 関数に5.0が渡されます。結果は 5 (整数値)になりますね。
3.list 関数に、5 が渡されます。 5を持ったリスト (5) になります。


同じ内容を、いつものS式に書きなおすとこうなります。

(list (int (Math/sqrt 25)))



おおっ。なんか分かってしまったでしょうか?

この、-> マクロは、"thread" と呼ばれるそうです。(Java.lang.Thread とは別の意味です)
動作としては、中に含まれるフォームを順に実行し、結果を次の一番外側のS式の2番目の引数として渡します。
#たいていの場合、S式の一番目は関数なので、”2番目の引数”とは関数の第一引数と読み替えてOKだと思います。


おお。めっちゃ便利やん。めっちゃ読みやすいやん。


また、このマクロを使った式を書く場合に
Clojureプログラマ達(Clojurians?)は、引数が渡される場所を明示するためにカンマを書くことがあるようです。

例えば、こんな感じに。

(-> (/ 144 12) (/ ,,, 2 3) str keyword list)
=> (:2)

(-> (/ 144 12) (* ,,, 4 (/ 2 3)) str keyword (list ,,, :33))
=> (:32 :33)


↑ 2番目の例で、(/ 144 12) の結果が、次の (* ,,, 4 (/ 2 3)) の一番外側の * の引数になっています。 内側にある / の引数にはなっていないです。
「一番外側のS式の2番目の引数」とは、こういう意味なんですね。

Clojureでは、カンマは空白とみなされます。
ですので、上記のカンマも処理としての意味は無く、読みやすさのために記号として書いているだけです。
#カンマを書くことで、その場所に代入するよう制御できるという意味ではないです。

また、記述するカンマの数も特に決まりは無いようで、好みの問題ということでした。(元のブログによると)



これは、読みやすいコードの為の強力な武器になりそうですね!!

それではまた!!(*゚∀゚)=3
スポンサーサイト



テーマ: プログラミング - ジャンル: コンピュータ

leiningen のプラグインを作る。
Clojureのビルドツール Leiningen (ライニンジェン?)のプラグインの作り方をまとめてみました。(`・ω・´)9m

Leiningen は、Clojureで書かれたビルドツールでMavenのようなものです。
#といいつつ、自分はMavenを実務でちゃんと使ったことないですがっ・・・(・∀・;)


プラグインは、Leiningen にタスクを追加する仕組みです。
Leiningenのタスクは、leiningen.$TASK という名前空間に$TASKという名前で関数を定義するという命名ルールになっています。
この命名規則に従って関数を作成すれば、あとはクラスパスに追加するだけでLeiningenで使えるようになります。
簡単ですね!


では、さっそくmyplugin という名前で簡単なプラグインを作ってみましょう!(*´д`*)

てってけてけてけてってってーん。
てってけてけてけてってってーん。(三分クッキングのテーマで)

⇒続きを読む ヽ(´ー`)ノ

テーマ: プログラミング - ジャンル: コンピュータ

ClojureのビルドツールLeiningenのチュートリアルを訳しました
Leiningenのチュートリアルを訳してみました。

Leiningenを使って開発を始めるのに、いい感じの足がかりに、、、なったらいいな!
無いよりはマシだと思います!たぶん!
(`・ω・´)9m ビシ

しかし、、、予想以上のボリュームだったので、めっちゃ時間かかってしまいました。

さらに、相変わらず直訳です。すみません。(´・ω・`)
改めて読み返したら、死ぬほど読みづらい・・・。


いつもは訳しながら自分でも実行してみるんですが、今回は訳すので精一杯だったので
コマンドやサンプルコードは、原文のものをそのままコピペしています。

前回まで、使っていたLeiningenとバージョンが違うみたいなので、若干実行結果が違うかもしれません。
ご注意くださいませ。


---

この翻訳にあたって、私の他の仕事のスケジュールも押してきたので、後半翻訳をお願いしてしまった奥さんに感謝を捧げます。
(昔、翻訳の勉強をしていたので、私の5000倍英語ができるのです)

#オライリー本のまえがき風に


このくらいの量を2,3時間で訳し切れるようになれたらな・・・
⇒続きを読む ヽ(´ー`)ノ

テーマ: プログラミング - ジャンル: コンピュータ

Clojure のビルドツール Leiningen のFAQ
なかなか Leiningen のチュートリアルにトライできないので、とりあえず Leiningen のページにあったFAQを訳してみました。

結構機能がいっぱいあるみたいですね~。
先に読んでおくと、機能のあたりを付けるのに良いかもしれないですね。

※また例によって、誤訳等ありましたら指摘頂けますとありがたいです。宜しくお願い致します。

Leiningen + Clojure でサクサクコード書けるように頑張らないと。

⇒続きを読む ヽ(´ー`)ノ

テーマ: プログラミング - ジャンル: コンピュータ

Clojure のビルドツール Leiningen をインストールする。
Leiningenは、Clojureのソースをビルドするツールです。

Clojure で書いたコードに必要なライブラリをWebから取得したり、コンパイル結果を単一のJarファイルにまとめたりできるみたいです。
#もっといろいろ出来るかもしれないですが、ちょっとまだ分かってないです。

では、前回作った開発環境に、Leiningenをインストールしてみましょう~
⇒続きを読む ヽ(´ー`)ノ