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

書き初めに、以下のお題に答えます。 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 認証するやつができました。


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

ICFPc2010参戦記

  • 会社の先輩に誘われて参加。
  • Common Lisp と英語が共通言語のチーム。コミュニケーションはIRCとgitのコミットログ。
  • 私は、Common Lisp書けない、ICFPc 初参加、月曜は会社で新人研修、なので、見学者扱い。
  • 記録: 0点
  • 任意の燃料を生成するための工場の生成プログラムを書く段階で断念。(大会の2合目といったところ)
  • 大会開始
  • 仲間が問題読む。
  • 仲間が回路の文法の解析。
  • 7時間目 仲間がゲートの入出力を同定。左 L-R(mod 3),右 L*R - 1(mod 3)。
  • 12時間目 私 参加。IRCログで以上の経緯を知る。問題を読む。回路シミュレータがもう半分できかけてるし、私の出番はなさそうだ。
  • 17時間目 仲間がサーバの入力列同定。
  • 20時間目 仲間が backward wire の意味を同定。backward か forward かはゲートの行番号で決まる。入力の初期値は 0 。回路シミュレータが完成に向かう。
  • 21時間目 仲間が回路シミュレータ完成。鍵prefix同定。
  • 次の問題は、サーバの入力列から鍵prefixを出力するような回路の生成だが、誰も解決できず。
  • 回路の記述 -> Graphviz 変換プログラム
  • 大会2日目に、Common Lisp を書けない私でも何かできることはないかと思って作った。
  • 問題文にあった鍵回路

http://eva-lu-ator.net/~gemma/hatena/icfp2010/keycircuit.gif

  • 簡単な回路1

http://eva-lu-ator.net/~gemma/hatena/icfp2010/simple01.gif
http://eva-lu-ator.net/~gemma/hatena/icfp2010/simple01detail.gif

  • 簡単な回路2

http://eva-lu-ator.net/~gemma/hatena/icfp2010/simple02.gif

  • 簡単な回路3

http://eva-lu-ator.net/~gemma/hatena/icfp2010/simple03.gif

  • 簡単な回路4

http://eva-lu-ator.net/~gemma/hatena/icfp2010/simple04.gif

  • 簡単な回路5

http://eva-lu-ator.net/~gemma/hatena/icfp2010/simple05.gif

  • 簡単な回路6

http://eva-lu-ator.net/~gemma/hatena/icfp2010/simple06.gif

  • 入力を出力する回路 (X:Xは気づかなかった)

http://eva-lu-ator.net/~gemma/hatena/icfp2010/identity.gif

  • ゲートのダイアグラム

http://eva-lu-ator.net/~gemma/hatena/icfp2010/diagram.gif

  • 常に 0 を出力する 定数回路

http://eva-lu-ator.net/~gemma/hatena/icfp2010/const0.gif

  • 常に 1 を出力する 定数回路

http://eva-lu-ator.net/~gemma/hatena/icfp2010/const1.gif
http://eva-lu-ator.net/~gemma/hatena/icfp2010/const1detail.gif

  • 常に 2 を出力する 定数回路

http://eva-lu-ator.net/~gemma/hatena/icfp2010/const2.gif

  • 定数回路じゃだめだ、NAND、カウンタ、シフトレジスタ…
  • ゲートをとりあえず4つ以下とかで並びかえ全探索すれば手がかりになるかも…でも Common Lisp じゃないと…
  • 仲間の Common Lisp を読めず、書けず、さりとて再実装する勇気もない自分がうらめしい。
  • 日本時間 月曜は会社で新人研修。
  • 日本時間 月曜21時に大会終了。何もできなかった。情けない。
  • 男はつらいよ柴又慕情を見ながら、酒を飲み、下品なtweetをして、ふて寝した。
  • 「あんときの酒は、辛口でしたネェ」

来年は Common Lisp でチームに貢献するぞ。

スレの勢い、スレ検索を追加しました。

  • 勢いで並びかえれば、いま盛り上がっているスレがすぐわかります。

http://eva-lu-ator.net/~gemma/geocities/ktkr2/speed.png

FC2ブログでのご利用方法

”テンプレートの設定”をします。
http://eva-lu-ator.net/~gemma/geocities/ktkr2/fc2matome0.png

”テンプレート管理”になります。ページをグイッと下に進めると、
”スタイルシート編集”があるので、コピペしてください。

http://eva-lu-ator.net/~gemma/geocities/ktkr2/fc2matome1.png

あとはいつもどおり、高機能テキストエディタ→ソースに挿入でお使いいただけると思います。

やったー2chまとめサイトエディター2.0できたよー\(^o^)/

2chまとめサイトエディター2.0

ここがすごい

  • 豪華なエディター

http://eva-lu-ator.net/~gemma/ktkr2/2.png

  • 画像の大きさをマウスでグリグリ

http://eva-lu-ator.net/~gemma/ktkr2/3.png

  • 見やすいテーブル表示。検索、ならびかえも。

http://eva-lu-ator.net/~gemma/ktkr2/0.png

  • キャッシュでスイスイまとめがはかどる。
  • 自動リンク、安価で並び替えもバッチリ。

http://eva-lu-ator.net/~gemma/ktkr2/1.png

実装

Gauche, YUI2, Sqlite3
3週間かかりました。IE8, Firefox3で動作確認済。

  / || ̄ ̄||  ∧∧      楽しく使ってね
  |  ||__|| (´・ω・`)     仲良く使ってね
  | ̄ ̄\三⊂/ ̄ ̄ ̄/
  |    | ( ./     / 

計算モデルと論理とゲーデルの不完全性定理

ゲーデルの不完全性定理は、数学を扱う数学、つまりメタ数学を考えるが、それだと理解が難しい。しかし、証明(æ•°å­¦)=プログラムという悟りを開くと、プログラムを扱うプログラム、つまりメタプログラムを考えればよくなり、それならコンパイラ等でなじみがあるので理解が優しくなる。

話の流れは以下。
1. プログラムとは何か
2. 証明とは何か
3. 証明=プログラム

                   ,
           (   {、 {   ヽ.ー、、
               \、__ぃ._ゝ⌒ヾ iヾ)}、_
              ン_ー-_二ー-, 〉 {厶 _、ヽ              _
             ヽ._>'´ / /,ィ/ / ハYヘい       ,. -- 〃⌒
 r−-、      ィ´  〃 ,イ/7'  ,イイ/ 小ヽ 丶、 ,. ‐ '´ハ i   ″`ヽ、
、ヽ、     /幺ィ  {从{小込v' jゥ仏厶川リ}  YV,   小 Vj. |丶   ヽ
 ` ー-ミー--'_,辷三彡'´ | V'芯`   芬Yjル/ハ. /   V√ヽ._! l\ \ '⌒ヽ
  ,. -‐ ` ̄    _ファィ! "´     ``ン'´イハy′    l{辷 { い. ト、ヽ._ヽ、   \
y'´   __,,_ ___,,彡'´八ム   _'__ 、_幺イ厶/     |'心`VヽヘE、ヽY い、  \
′   / |!    r==ァ'゙’_ヘ、 ´_ー,Z.彡-―-〈   ‐- 、 ド¨    {tリj ハ> i`′   ヽ
.    /   !リ    ,.幺-‐=,.イ´'´ ,. / /   ヽ    \l __ '   `゙ ん}.i_,」      `、
.    i`¨¨´   . '´ /ィ<{V/  /,イ i′ ,ハ `、   、ぃヽ「⌒`j   厶イl」     、   ぃ            ―――証明と
ヽい  l     /  /レ′/〈.い、___,{.{   , -‐ \ \ーヘ` ` `ヒ´_イy , ム、 、   ヽ.   }.}、
`  \V  /,   ,{ {  '´_,ム≧ー、-ヘー}-/  ,. -‐-、ヽノ  ヽ  ハ `バ´^)\`ー-)  }ハ.  ハ{
 ,. 、   >'/   { い.ィ/ゥ ̄`ハ}ヽ\.{ /    _Vごヽ.._/   }ー}`丶乙ヽ '7ノ^ }/
ヽ'^\ー '´_,,. -‐<ゝ`ー之,_ //  }ハヘ{、i    ヽ`マTハ_ _/;  ヽ、 ハ、}ノ┐
,、-‐¬''" ,イ丁二了 {  ___彡' / ノノ  ヘ!      `∨だ¬ /  ∠_` }ヘ ン
 〉 -r‐/√    l ハ._乙 -‐'´/´/    ム      ヾ^ `i′ \ ` ー1´ヽ
-ー‐¬、Y'      |/   /了¨¨´  , '  -‐ ' ,.小、       丶 !    丶.     i
  /_,.      ,?..._ {イ{   /    / |′丶       マi 、_         ト、     ,nyぃ/
 /´ /      ∠-- .._`丶、 ィ"¨¨ ーヘ 〉|   \      ヽ     -‐   ヽl `"¨¨´ ̄|il}い} ,        プログラムは―――
    { ,ィ,イ厂¨\.!  `ヽ/ '´ ̄`¨マ´/ |     i>、   , - \, '"⌒丶. ハ  __,,.. 」リ近'´
   ∨い、   ` ',         _,. -≧ュ、',      |エ\       Y         |´    ,ゝだンゥー
           i      ,./'´ヽ ヾ 'r-ヘ    l-, -― 、   l.        !    ` }} `^`
          、_r{ヽ   //´  ,.ィ √ }ーヘ  -‐'´__,. 、  ヽ   |__,,.. _、  、ヽ
          ュ?ム′ , '  /。/ // ,'ム斗ヘ  /    `¨´    l     ヽ   丶
         ゞイ} ,ム./   ∧/−-/ ァZ/! i._ぃ (._,,.. ヘ下、   i l |ィT_i_、_ \.  ',
         ケ´|./ 〈  ∧/__ ,<./ / 7/、!´ 「 i.ヘ r‐ 、___`ー--‐―_、i. l i!ヘヘヽ、\ }
         °厶イ\/∨¨7`ヽ'´ ; / l i  l lヘヾヽ._`¨`ーァー ユ´l=キミ、vヘ_ぃ. Y         「「おなじだよ♪」」
           ,.ゝヘ2__,イ'‐ / / ′!j_! | !. -i¬ ヘ.く`ヽ`¨´ー'´/ィケ i. l i! l マヘ.ヘ\j
         r'´  `¨^タ_ / / i /l_j、|i_,,. l-‐!__Vドヽ`ー‐z_'.イ√丁| i! ト、i_,.Vヘヾ`ヽ、
         ヽ.___,.イ_/ `7、,' !´ i j ヘ Y'i,.ィ'"^v,.--}、`^マ´/ _/ 7√¨¨マ丁ンj_,.イ´ マベへ`ヽ、
           / //‐-/、/ヽ| / . V   !  〉¬ーi、_〉、Y´,_}厶_rt__ri.}└1厶ィつ}ヘへ>>>ぅ,
         // //..__// ヽj' !、__! { jー-'¨´/  厂ヽ.__マ^¨¨´   `1  r‐}_  `ーラ^´ r、√
         Z/V ヽ,くノ _ 廴_j、ノ  j,.、_y'    /   ム._广^i        `¨´  `辷'´厶ノ´

                 ハスケル・カリー & ウィリアム・ハワード

4. プログラムできないこと(停止性問題)
5. 証明できないこと(ゲーデルの不完全性定理)

何はともあれ、定義を見てみよう。

自然数論を含む帰納的に記述できる公理系が、ω無矛盾であれば、証明も反証もできない命題が存在する。
- ゲーデルの不完全性定理

なんのこっちゃだが、今から分かりやすく説明する。

続きを読む

SchemeコードバトンをGaucheでCGIにしてみた

Scheme コードバトンまとめページ - ひげぽん OSとか作っちゃうかMona-
より、英単語暗記補助ツールを作るお題。
最初はコマンドプロンプトで「この単語を知っているか? Y/N/Q」だけの単純なプログラム(67行)だったのが、
10人以上のバトンを経て、今はすごい複雑(570行)になってる。
とてもついていけないので、こうなったらもう、違う方向から攻めようということで、GaucheでCGIにしてみた。

http://eva-lu-ator.net/~gemma/baton/

↑のは、実はAjaxで以下の4つ5つのWeb APIを叩いてる。

word.cgi?q=3
q は問題ID(整数)。
問題データを返す。

<quiz id="3">
  <word>defect</word>
  <mean>欠点</mean>
  <ok>4</ok>
  <ng>5</ng>
</quiz>
続きを読む

Mozilla勉強会(#modest)に参加しました

Mozilla 勉強会 « Mozilla Developer Street (modest)

  • プレゼン資料 アプリケーションプラットフォームとしてのFirefox拡張
    • HTMLでプレゼンを作れるS5を使っています。gitとの相性もいいし、ブラウザの表現力を活かせるので好きです。

Firefox3 Hacksにサインをいただきました

http://eva-lu-ator.net/~gemma/geocities/modest/firefox3.png

Firefox 3 Hacks ―Mozillaテクノロジ徹底活用テクニック

Firefox 3 Hacks ―Mozillaテクノロジ徹底活用テクニック

ノベルティをいただきました

  • クリアーファイル! レア物とのこと。

http://eva-lu-ator.net/~gemma/geocities/modest/novelty0.png

  • ノートパソコン用バッグ! Firefoxのアイコン付き! これはすごい

http://eva-lu-ator.net/~gemma/geocities/modest/novelty1.png

  • ステッカー、ボールペン、携帯ストラップ、ネックストラップなどなど!

ありがとうありがとう!
JetpackやMozillaの現状など、とても勉強になりました。次回もぜひお願いします。