コード書き初め「一二三」

書き初めに、以下のお題に答えます。 C++の問題ですが、 Javascript で。

1から1000までプリントせよ。ただし、ループ文や条件分岐文を使わずに。
c++ - Printing 1 to 1000 without loop or conditionals - Stack Overflow

コード(Firefox 専用)

var zero = function(f) function(x) x;
function succ(c) function(f) function(x) f(c(f)(x))
function add(n,m) function(f) function(x) m(f)(n(f)(x))
function multiply(n,m) function(f) function(x) n(m(f))(x)
function power(n,m) function(f) function(x) m(n)(f)(x)
function cton(c) c(function(x) {document.write(x + 1 + '\n'); return x + 1;})(0)
var two = succ(succ(zero));
var three = succ(two);
var five = add(two, three);
var thousand = power(multiply(two,five),three);
cton(thousand);

実行例:

http://eva-lu-ator.net/~gemma/hatena/hihumi.html

参考

道 (TAO) から一が生まれ, 一から二が生まれ, 二から三が生まれ, 三から万物が生まれ, 云々
Church numerals and Lambda Calculus

近況報告

新人1年目です。

仕事で Allegro Common Lisp を使っています。
いい処理系です。性能もいいし、ドキュメントもしっかりしてるし、 Emacs インタフェースもよくできてるし、マルチプラットフォームと国際化もバッチリだし。
うちの部長もよく言っていますが、確かに仕事で使うなら Allegro Common Lisp ですね。


うちの会社は ウェブサービス屋さんではないので、「入社したらウェブ技術とはお別れかな」と思ったら、全然そんなことなかったです。
おまけに、仕事で RDF とか セマンティックウェブの勉強もさせてもらいました。


書き初めといいつつ、年末年始もずっとコードを書いてました。
まとまった時間がとれたら片付けようと思っていたコードで、
Firefox 拡張で、 TCP/IP ソケットを開いて、 XMPP を nsISAXXMLReader でパースして、digest-md5 認証するやつができました。


今年もよろしくお願いします。