Google
ブログ(iiyu.asablo.jpの検索)
ホットコーナー内の検索
 でもASAHIネット(asahi-net.or.jp)全体の検索です。
 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。
 例 中村(show) ki4s-nkmr

ウェブ全体の検索

Stuart Halloway著、川合史朗訳「プログラミングClojure」2010年02月17日 06時12分08秒

ASAHIネット(http://www.asahi-net.or.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://iiyu.asablo.jp/blog/2010/01/26/4838642
プログラミングClojure
で名前を出した
http://www.amazon.co.jp/exec/obidos/ASIN/4274067890/showshotcorne-22/
プログラミングClojure (単行本(ソフトカバー))
Stuart Halloway (著), 川合史朗 (翻訳)
 先日、やっと読み終わった。
 もう、おれ、Clojureだけあれば、いいわ。\(^O^)/
 そんな気になったね。
 読んで、一ヵ所だけ、誤植と思ったのは、115ページ下から10行目くらいの
簡単なマップにkeysとvaluesを適用してみよう
は、
簡単なマップにkeysとvalsを適用してみよう
でしょうね。
 原書
http://www.amazon.co.jp/exec/obidos/ASIN/1934356336/showshotcorne-22/
Programming Clojure (ペーパーバック)
Stuart Halloway (著)
も持っているけど、第6章のConcurrencyだけ、ざっと眺めただけであとは積
ん読。コードも書かないという状況だったから、この翻訳が出て助かった。
 Clojureは、まだまだ英語でも情報が少ないし、それもわかりやすいちゃん
とした解説が少ない。日本語はもっと少ない。
 そこに本書が出た意義は、大変、大きい。
 本書に書いているClojureの売り文句が、いいね。
・Clojureはエレガントだ。
・Clojureは「Lisp・リローデッド」だ。
・Clojureは関数型言語だ。
・Clojureは並行プログラミングを簡単にする。
・ClojureはJavaは歓迎する。
・他の多くの人気のある動的言語と違って、Clojureは速い。

 まさに、「Lisp・リローデッド」です、これ。
 話は前後するが、注文して送られて来たのを初めてみたとき、本書が意外に
小さくて薄いので、驚いた。アマゾンのデータでは、304ページだ。
 読んだらわかるが、これ、
http://iiyu.asablo.jp/blog/2009/12/01/4731394
Graham Hutton著、山本和彦訳「プログラミングHaskell」
で紹介した
http://www.amazon.co.jp/exec/obidos/ASIN/4274067815/showshotcorne-22/
プログラミングHaskell (単行本(ソフトカバー))
Graham Hutton (著), 山本 和彦 (翻訳)
と同じパターンね。これは、アマゾンのデータでは、232ページ。
 言語自体の抽象度が高く、夾雑物が少ないから、短いコードでも高水準、高
機能なことができるし、説明も少なくてすむ。読者も理解しやすい。だから、
ページ数も少ない。こういうことだろうと思う。
 シーケンスによる抽象化は強力ですね。Common Lispにも、シーケンスがあ
って、リストやベクタがシーケンスとして抽象化されているが、Clojureのシ
ーケンスはもっと拡張されていて、ハッシュ、XMLのツリー、ディレクトリ構
造、I/Oストリーム、JDBCとSQLでデータベースから得たレコードのセットもあ
れやこれや、シーケンスで扱えるようになっている。
 Clojureのシーケンスがあれば、Javaのコレクションライブラリは使うこと
はまずないというのも納得。Haskellなどにあるリスト内包表記もある。とい
うより、シーケンス内包表記。これとシーケンスの組み合わせは、とてもいい。
もちろん、遅延評価による無限リストもある。
 ついでにいうと、最後にあるJDBCによるデータベース操作で解説してある遅
延評価による落とし穴には、なるほどと思った。

 脱線するが、Common Lispには、Series(シリーズ、級数)、Generator,
Gathererというのがある。規格には入っておらず、付録で参考扱い。これ、
Common Lispのシーケンスをもっと拡張しようとしたもの。1980年代後半から
1990年ころの話ですね。
参考:
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node1.html
Common Lisp the Language, 2nd Editionの目次
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node141.html#SECTION001800000000000000000
14. Sequences
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node347.html#SECTION003400000000000000000
Appendix A. Series
http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node362.html#SECTION003500000000000000000
Appendix B. Generators and Gatherers

Common LispでSeriesを扱えるようにするマクロは、
http://series.sourceforge.net/
This is Richard C. Waters' SERIES package for Common Lisp
にある。Richard C. Watersさんは、上記付録を書いた人。
 今回調べたら、ほかにもアイデアがあれこれあったのね。
 Iterateマクロというのがある。
http://common-lisp.net/project/iterate/
Iterate Project
http://common-lisp.net/project/iterate/doc/index.html
The Iterate Manual
 リスト内包表記(List comprehension)ならぬLisp内包表記(Lisp
comprehension)の論文がある。
http://www-rali.iro.umontreal.ca/Publications/urls/LapalmeLispComp.pdf
Implementation of a “Lisp comprehension” macro
 1991年だから、20年前だね。

 Clojureに戻る。
 Lispの括弧を減らせるところは減らして見やすくするという設計方針がある。
 リスト、ベクタと配列、ハッシュにそれぞれ表記法を導入しているから、
Common LispやSchemeより、見た目は見やすい。
、関数のパラメータ部分は、(と)ではなく、[と]なのね。
 しかし、これ、単に見やすくなるだけじゃない。
 [と]でくくると、Clojureのベクタになる。そして、パラメータの部分がこ
うなってることで、Lispでいう destructuring-bind が、きれいに入っている
のね。これには、センスを感じて感動した。
 そして、Schemeの優れた実装であるGaucheの生みの親で、本書を翻訳した
Shiroさん(川合史朗さん)は、destructuring-bind を「分配束縛」と訳してい
る。おお、なんとわかりやすい。これにも、センスを感じて感動した。
 「,」が空白扱いという、けっこう思い切ったことをやっている。これも、
見やすくするためだそうです。たとえば、(a b c)を(a, b, c)と書けるわけ。
 でも、その影響で、Lispのマクロで使う「,」は、Clojureのマクロでは、
「~」を使うことになっていて、「,x」や「,@」は「~x」や「~@」になるのね。
ちょっと気持ち悪い。^^;
 そうそう、Clojureには、ちゃんとマクロがあります。Lispのマクロは、
Lispの尽きぬ生命力の源だもんね。
 マクロを書くのは中級者の世界、いいマクロを書くのは上級者や達人の世界
の技なので、本書にあるマクロに関するルールと例外も、なるほどなんです。
 本書では、個人的に悲しいことがあった。マクロで使うバッククォート(`)
が、老眼のおれには、通常のクォート(')と判別できない(泣)。
 普通、バッククォートは、左上から右下にちょいと長目の点を打った感じで
しょ。本書のフォントでは、左下から右上に行ってて、右上から左下に行って
る通常のクォートとすごく似ている。おれの老眼にはアウト!
 Common Lispのマクロの詳しい解説は、
http://iiyu.asablo.jp/blog/2007/03/23/1337051
うぉぉ、「On Lisp」日本語版が来たぁぁ\(^O^)/\(^O^)/\(^O^)/
で紹介した
http://www.amazon.co.jp/exec/obidos/ASIN/4274066371/showshotcorne-22/
On Lisp (単行本)
ポール グレアム (著), Paul Graham (原著, 翻訳), 野田 開 (翻訳), 野田
開 (著)
がある。これ、Clojureでマクロを書くときにも大いに参考になると思う。

 プログラマが末尾再帰最適化用に陽に使うrecurというのがあるのね。リス
ト内包表記やシーケンス内包表記と高階関数があれば、再帰を書くことはかな
り減るから、末尾再帰が最適化されてなくても、さほど気にならないんでしょ
うね。
 真偽値の扱いでは、空リスト()が、偽じゃないのね。つまり、nilと()は違
うということ。
 陽にオブジェクト指向はないが、CLOS(Common Lisp Object System)的に、
マルチメソッドがあるから、オブジェクト指向的にも書けるんだね。
 メタデータの使い方も面白い。なるほど、Clojureの世界では、そういう使
い方が発達しているのかと。
 Javaがあまりに簡単に呼べるのもいい。特にリフレクションが簡単に呼べる
のが、うれしい。
 並列・並行プログラミングには、副作用のない関数型言語が相性がいいこと
はよく知られているが、Clojureは、関数型言語なので、もちろん、相性がい
いし、さらに、refを使ったMVCC(Multiveesion Concurrency Control, 多版型
同時実行制御)によるSTM(Software Transactional Memory, ソフトウェアトラ
ンザクショナルメモリ)、アトム、エージェント、varといった各種のメカニズ
ムも入っているし、どうしてもというなら、Javaのものも使える。
 この辺は、マルチコアのプログラミングが普及していけば、評価が定まって
くるでしょうね。
 副作用に関していえば、Lisp(Common LispもSchemeも)は、関数型言語に分
類はされるけれど、副作用ばりばり。Haskellは副作用なしという信条がある。
Clojureの副作用に対する態度は、LispとHaskellの間でいえば、Haskell寄り
だが、副作用は絶対だめというガチガチではなく、使う方がきれいに書けてメ
ンテも楽なら副作用もありという態度。
 ゆえに、おれは勝手にCljureを、高純度関数型言語と命名・分類します。\(^O^)/

 そうそうそ。「ゲーデル、エッシャ-、バッハ」が参考文献にあって、やっ
ぱ、「Lisp屋は一度はハマるよね、この本」と思いました。これについては、
http://iiyu.asablo.jp/blog/2007/03/14/1260227
円周率音楽、ゲーデル、エッシャー、バッハ、モーツァルト
で、
http://www.amazon.co.jp/exec/obidos/ASIN/4826900252/showshotcorne-22/
ダグラス・R. ホフスタッター著, 野崎昭弘, 柳瀬尚紀, はやしはじめ訳
「ゲーデル、エッシャー、バッハ―あるいは不思議の環」
http://www.amazon.co.jp/exec/obidos/ASIN/4826901259/showshotcorne-22/
ダグラス・R. ホフスタッター著, 野崎昭弘, 柳瀬尚紀, はやしはじめ訳
「ゲーデル、エッシャー、バッハ―あるいは不思議の環 20周年記念版」
 関連として、
http://www.amazon.co.jp/exec/obidos/ASIN/4826901267/showshotcorne-22/
ダグラス・R. ホフスタッター著, 竹内郁雄, 片桐恭弘, 斉藤康己訳
「メタマジック・ゲーム―科学と芸術のジグソーパズル」
を紹介しています。

 おれ、もう、仕事で使う言語としては、Java仮想マシン(JVM)上の言語にし
か興味がない。^^;
 まず、Windows, Linux, SPARCのSolarisとx86のSolaris, AIX, HP-UXなどな
ど。これらの32bitと64bitのビルドとテストをするのは、ほんとに大きな負担。
その点、Javaは、発表から15年経って、スタンドアローンのGUIのアプリも含
めて、限りなく100%に近い互換性があり、Write once, Run everywhere(一度
書けば、どこでも動く)だから、Javaで済む仕事なら、Javaで書いておくのが、
複数プラットフォームのサポートでは、一番楽。
 個人的には、Unicodeの文字列や日付やら通貨やらいろいろある国際化対応
の機能が、充実して安定していることも大きい。スクリプト言語は、この辺が
いまいちに思う。Javaのそれはもう慣れてるから、それを使えるのがうれしい。
 JVM上で動くことで、Clojure自身は、これらの機能を用意しなくてもいい。
逆にいえば、Javaのこれらの機能を知ってないとClojureから使えないという
ことになる。
 そんなこんなで、Javaで一番ノウハウがたまっているから、その世界で、も
っと楽に書けてメンテも楽になるなら、そういう言語で書きたいわけ。
 でね、マルチコアをにらんで、Erlangもみてたり、JVM上の言語では、JRuby
やScalaもみてたけど、やっぱ、根がLisp好きなんだね。しばらく、仕事に使
うちょっとしたツール類などは、もう、Clojureで書いてみようと思った。
 本書を翻訳したShiroさん(川合史朗さん)は、JVM上で言語を作ることについ
ては、あとがきで、複雑な心境を吐露しています。言語の設計者、実装者とし
ての心情は理解できるが、おれは、そういうのないお気楽な人間だから、
「もう、Clojureでええわ。\(^O^)/」
だもんね。
 さっそく、NetBeansに、後述の日本語サイトにあった情報を参考に、
Clojureのサポートを追加するプラグインを入れました。
 Clojure 1.1.0のプラグインだと、Windowメニューの「Create Standalone
REPL」で、REPLのウィンドウがうまくできない。Clojure 1.0.0のプラグイン
だと大丈夫だったけど。でも、「Netbeans IDE REPL」でREPLが使えるから、
まあいいやと思って、1.1.0にしてます。

 実は、
http://iiyu.asablo.jp/blog/2009/08/18/4522323
LispとScalaの日本語新刊
で名前を出した
http://www.amazon.co.jp/exec/obidos/ASIN/4844327453/showshotcorne-22/
Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming
in Scala) (単行本)
Martin Odersky (著), Lex Spoon、Bill Venners (著), 羽生田 栄一 (監修),
長尾 高弘 (翻訳)
は、しこしこ読んでて、少し、コードも書いたけれど、もうClojureにしよう
と思った。これ、アマゾンのデータだと624ページ。前述のHaskellやClojure
本と比べると、2倍から3倍あるね。
 Scalaを弁護しておくと、JVM上の言語では、Scalaも全然悪くないどころか、
非常にいいと思う。Lispの世界がわからない人は、Scalaでもいいと思う。で
も、Lispのパワーを知っている人、Lispのパワーを使いたい人ならClojureも
考えたほうがいいと思う。
 ScalaとClojureがあれば、おれ個人は、もうPerl, Rubyは捨てられそう。こ
れらの実行速度の遅さが気になることがあったし。Perlのすっきりしないとこ
ろやRubyのbegin, endはあまり好きじゃないし。

 以下、関連リンク。
 出版社のページは、
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06789-1
プログラミングClojure
 本書に出てくるコードなどは、
http://www.pragprog.com/titles/shcloj/programming-clojure
Programming Clojure by Stuart Halloway

http://clojure.org/
Clojure 公式サイト
http://sites.google.com/site/clojurejapan/Home
Clojure 日本語サイト
 Clojureの有用なライブラリの集積地
http://code.google.com/p/clojure-contrib/
clojure-contrib

http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-clojure/
Clojure プログラミング言語
 これに出てくるProject Eulerって、なんかあれこれやってるね。
http://projecteuler.net/
Project Euler
http://odz.sakura.ne.jp/projecteuler/
Project Euler日本語サイト

 Clojureの生みの親、Rich Hickeyさんのインタビュー
http://www.infoq.com/interviews/hickey-clojure
Rich Hickey on Clojure's Features and Implementatio

 Programming Clojureのコードは、
http://github.com/stuarthalloway/programming-clojure
にもあるね。GitHubにあるんだから、きっと、こっちがオリジナルだね。

http://manjilab.com/
マンジラボ
というところの
http://manjilab.com/2010/02/04/clojure-lib-coding-standards/
clojure.lib コーディング規約・訳
にも、Clojure情報がありますね。
 そして、おお、Project Eulerをやってるのね。
http://manjilab.com/tag/euler/
http://manjilab.com/tag/euler/page/2/
http://manjilab.com/tag/euler/page/3/

関連:
http://iiyu.asablo.jp/blog/2009/12/31/4786766
Clojure本の翻訳をShiroさんがやってるんだって
http://iiyu.asablo.jp/blog/2009/02/27/4141043
JavaVM上新Lisp Clojure, Scalaのこと、なぜかキース・ジャレットも。^^;
http://iiyu.asablo.jp/blog/2009/03/11/4169022
JVM上新Lisp Clojureのこと, Scalaも
http://iiyu.asablo.jp/blog/2009/07/23/4450599
ケンブリッジ物理公式ハンドブック, Pocket Ref, Scala, Clojure, AIMAなど

プログラミング言語で種族分け2010年02月17日 06時15分26秒

ASAHIネット(http://www.asahi-net.or.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
 これ↓いいねえ。笑いました。
http://d.hatena.ne.jp/wasisan/20090705/p1
プログラミング言語で種族分け

 「堕天使: Lisp」は、最高の褒め言葉ですね。
 おれにとって、Lispは、永井豪さんのデビルマンです。
 悪魔の力、身に付けた正義のヒーローだもんね。
 ということで、個人的には、

    デビルマン: Lisp

です。\(^O^)/