2007-06-21

このところ恐ろしく多忙で自分の仕事が何にもできない状態です。(仮払いの請求書書きがやっと…)

とはいうもののたまる一方のストレス解消に買ってしまいました。rx4540

以前友人のを見て「欲しい」と思ったので購入したのですが久しぶりのCE?マシンでいろんな事情がよくわかりません。

まあ、本業がめちゃ忙しいし会議の時にでもボチボチとやっていこうと思っています。

JoyでFizzBuzz(3)

もう少し整理してみました。

DEFINE
roll4 == swap [swap [swap] dip] dip;
mkifte == [unitlist swap] dip unitlist swap;
fbq == roll4 [rem 0 =] dip mkifte ifte;
fbnum == dup 15 "FizzBuzz"
[dup 3 "Fizz"
[dup 5 "Buzz" [dup] fbq]
fbq]
fbq popd;
fblist == [fbnum] map;
interval == swap [<=]
[pop [] cons]
[dup [swap] dip succ]
[cons]
linrec.

実際のところ(2)も(3)もgcが動き出すのでリソース使い過ぎなのでしょう(dip依存症)。最初のはそんなことありません。

いっさい代入せずにスタック操作だけでプログラムを作ると「変数、代入」の便利さがよくわかります。

JoyでFizzBuzz(2)

少しパワーアップしました。

DEFINE rem2 == swap [integer] [swap rem 0 =] [pop pop false] ifte;
lst == [] cons;
fbq == [dup] dipd [rem2] dip [lst swap lst] dip lst swap ifte;
fbnum == 15 "FizzBuzz" fbq
3 "Fizz" fbq
5 "Buzz" fbq;
fblist == [fbnum] map;
interval == swap [<=]
[pop [] cons]
[dup [swap] dip succ]
[cons]
linrec.

lstは何か他にありそう。rem2はあざとい?でもfbnumはスタックいじってる感が出ているような。

JoyでFizzBuzz

ぜんぜんJoyっぽくないんですが手習い中ということで…

DEFINE fizz == 3 rem 0 =;
buzz == 5 rem 0 =;
fizzbuzz == 15 rem 0 =;
fbnum == [fizzbuzz]
[pop "FizzBuzz"]
[ [fizz]
[pop "Fizz"]
[ [buzz]
[pop "Buzz"]
[]
ifte]
ifte]
ifte;
fblist == [fbnum] map;
interval == swap [<=]
[pop [] cons]
[dup [swap] dip succ]
[cons]
linrec.

こんな感じです。(だっさー)。苦労したのはinterval。他に見るべきものはないですね。

1 100 interval fblist.
[1 2 "Fizz" 4 "Buzz" "Fizz" 7 8 "Fizz" "Buzz" 11 "Fizz" 13 14 "FizzBuzz" 16 17 "Fizz" 19 "Buzz" "Fizz" 22 23 "Fizz" "Buzz" 26 "Fizz" 28 29 "FizzBuzz" 31 32 "Fizz" 34 "Buzz" "Fizz" 37 38 "Fizz" "Buzz" 41 "Fizz" 43 44 "FizzBuzz" 46 47 "Fizz" 49 "Buzz" "Fizz" 52 53 "Fizz" "Buzz" 56 "Fizz" 58 59 "FizzBuzz" 61 62 "Fizz" 64 "Buzz" "Fizz" 67 68 "Fizz" "Buzz" 71 "Fizz" 73 74 "FizzBuzz" 76 77 "Fizz" 79 "Buzz" "Fizz" 82 83 "Fizz" "Buzz" 86 "Fizz" 88 89 "FizzBuzz" 91 92 "Fizz" 94 "Buzz" "Fizz" 97 98 "Fizz" "Buzz"]

もうちょっと、らしくしないと。

高層マンション

しばらくぶりに東京へ。千歳烏山に用事があって出かけたのですが周囲のいろんなところに高層マンションが出来ているのに驚きました。といっても山梨でさえ増えているのですから珍しいことではないのでしょうが。

高層マンションで不思議なのはゴミの始末です。うちは小さな集合住宅ですがゴミはそれなりに出ます。高層マンションだと住居も多いのでかなりのゴミが出そうです。1日にいったいどの位のゴミがでるのかわかりませんが単純に外挿しただけでも多そうです。

普段は処理業者の人が来て持っていってくれるのでしょうが、災害の時なんかどうなるんでしょう。そういえば下の処理も大変そうです。「イザというとき食べ物は2、3日すれば支援物資が届くが、下の処理は1週間くらい覚悟しとかないと生活するのが大変になる」なんてことを誰かが言っていたような記憶があるのですが、マンションの大量のゴミも生活する上では厄介なことになるんじゃないでしょうか。

まあ、「きっと最近の住宅は進歩してゴミや下の処理も考えてあるんだろうな~」なんて、信号待ちで高層マンションを見ながらボケーっと考えていました。

ロシア

http://headlines.yahoo.co.jp/hl?a=20070522-00000006-san-int

ロシアで一度に3回もパスポートの提示を求められた身としては怖い話です。

ロシアでは旅行者がパスポートを持たずに外出すると捕まってしまうそうですが、ホテルにつくと登録のためにパスポートを取り上げられてしまうので着いた当日なんかは結構大変です。一度パスポートなしで外出しようとしたのですがフロントに行ったらパスポートが戻ってきてたので持って出かけたところ、冒頭のように提示を求められて焦りました。クレムリン付近は個人で出歩くには危ないところでした。

ところで、この記事を書いている内藤さんはユニークな人でした。元気そうで何よりです。

下げ株

パワーポイントに仕込んだ効果を忘れて発表中に戸惑う人。「ああ」とか「そうだ」とか小さな声を発する。

Joyのソースコード

id:propellaさんも記事id:propella:20070518:p1で述べられているとおりJoyにはたくさんのソースコードがあるように見えますが実際は存在しないか、同じものです。

http://www.latrobe.edu.au/philosophy/phimvt/joy.html

このサイトの「3. The C sources and the Joy libraries」章に「The C sources:」以下でCソースコードへのポインタがあります。

The old Joy0 C-files The prototype has now been abandoned.

→これはPage not foundです。

Joy1 Prospectus (1K)

→現在のJoyは元々Manfred von Thunさんが開発したものをJohn Cowanさんが改良したもののようです。後者の紹介が書かれています。

John Cowan’s site: his joy.tar.gz (500K)

→これもPage not foundです。John Cowanさんのサイトhttp://home.ccil.org/~cowan/は参照できます。アダルトな小説も公開していてちょっと面白い人なのでしょうか。

current joy.tar.gz (500K) includes:

→実際に動くJoyのソースコードが得られます。このソースにはJoy本体の他、さまざまなライブラリやゴミ集め(GC)のシステムも含められています。

The new Joy1 C-sources (including a tar.gz)

→このページでは上記のJoy本体のソースを直接webで見ることができるようになっています。このページにはjoy1src.tar.gzがありますが、これは本体のみを抜き出してtgz化したものです。中身は先ほどのものと同一です。

Bugs, Fixes and Plans(30-Oct-01)

→Page not foundです。

LICENSE (BSD license)

→ライセンスについてベタなテキストで書かれています。

Miscellanous miniature implementations of Joy

→ここにはJoyをさまざま言語で実装した例があります。Prolog, Lisp, Pascalによるものまであります。Prologによる実装が一番コンパクトなようで、さすがにSqueakでそこまで小さくできる自信がありません。

Joy

暇をみつけて少しずつSqueak上で実装しています。Cソースを見ながらできるだけコンパクトになるよう進めているのですが、再帰を多用している現在の実装ではロボットに積むのはちょっと不向きかもしれません。多分簡単に再帰を使わない実装にできると思うのですが、時間もないので趣味的にゆっくりやっていこうと思います。

Sorrow

Sorrowの実装はまだ見つけられませんが、squeak-devに投稿された記事は見つかりました。

http://lists.squeakfoundation.org/pipermail/squeak-dev/2004-February/073798.html

これを見るとナイーブな実装ではなく、arrayオブジェクトに#value:メッセージを送ると、arrayをスタックとみなしてJoy風の動作をするようなもののようです。

Joyのquotationも以下のように記述できるらしい。

#((1 2 3) 0 (+) inject:into:)

ただcombinatorに関する記述はないみたい。どうなんでしょう。実物がないので詳しくわからないのが残念です。