草を生やせ!!(ラムダ計算を1ミリも理解していない工場長がGrassを遊ぶ2)

2010/08/22, 03:21

前回までのあらすじ:
 情報系の大学に言っていたと豪語するわりには、言語論も計算論も理解していないワタクシが、ラムダ計算を記述する言語「Grass」に現実逃避したのだが、むしろ過酷だった。果たして、草を生やせるのか。

 さて、Grassの公式をもう一度眺めてみると、こんな記述があった。

Grassはスタックマシンの一種です(SECDマシンに似てます).値が入るスタックがあり,関数適用の結果がこのスタックに積まれていきます.スタックの中の値にはスタックの一番上から順番に1, 2, …と番号が振られていて,この番号でスタックから値を取り出すことができます.関数適用のWとwの数は,この番号を表しています.

で、スタックの初期状態は空っぽではないらしく、こんなことが書いてあった。

初期環境E0はこんな感じ.

* E0 = Out :: Succ :: w :: In :: ε


この下に、このOutからInまでの説明があった。これをまとめるとこんな感じ。

 ←ここに新しい関数が積まれる
Out引数をそのまま出力する関数
Succ引数に1を足す
wそのまま"w"
In入力を受け付ける関数
εナニコレ?

で、肝心なWとwの関係は、Wが関数がスタックの上から何番目?wが引数がスタックの上から何番目?というものらしい。

 あとは、スタックが妄想できれば、なんとかなりそうだ。試しに、インタプリター配布元のサンプル「wを一個出力する」をスタックで書いてみる。

 2個目のOutを呼び出し、引数は4個目のw
Out引数をそのまま出力する関数
Succ引数に1を足す
wそのまま"w"
In入力を受け付ける関数
εナニコレ?

なので、プログラムは wWWwwww となるようだ。

さて、ここから「wを2個出す」に挑戦してみる。まずはスタックを考えてみるとする。

 3個目のOutを呼び出し、引数は5個目のw
 2個目のOutを呼び出し、引数は4個目のw
Out引数をそのまま出力する関数
Succ引数に1を足す
wそのまま"w"
In入力を受け付ける関数
εナニコレ?

なので、コードは wWWwwwwWWWwwwww となる。

 続いて、「xを一個出力」にチャレンジしてみる。おなじみのスタックは、こんな感じ。

 3個目のOutで2個目(直前のx)を出力する。
 3個目のSuccを用いて、4個目のwをxにする。
Out引数をそのまま出力する関数
Succ引数に1を足す
wそのまま"w"
In入力を受け付ける関数
εナニコレ?

コードはこんな感じ wWWWwwwwWWWw

なんとかなったけど、課題は山積み。
  • w2個じゃ草原じゃない。しかし、現状沢山出すの無理がある
  • 最初に書くwの意味を理解していない
  • 足し算とか掛け算とか割り算とか引き算とかしたいな
  • あれ、トップページを作り変えるのでは?

そんなこんなで、日の出間近。寝ますかね。

 そうそう、この文章には間違った情報が掲載されている可能性が高いです。間違っていることがあれば、コメントいただければ幸いです。

参考サイト:
前回に同じため略

草を生やせ!(ラムダ計算を1ミリも理解していない工場長がGrassを遊ぶ)

2010/08/22, 02:34

 以前、情報科学若手の会に参加した。この折に紹介されていた「ちょっと草植えときますね型言語 Grass」というのがあったが、BrainF*ck(という変な言語がある)ですら、理解に苦しむ状況だったので、会場で盛り上がる計算機言語やラムだけ遺産ラムダ計算のプロフェッショナルたちを見ながら芝刈りに勤しんでいた。

 この「Grass」という言語はw, W, vだけで記述するというもので、この言語で書くためにはラムダ計算への理解が必要らしい。ただ、言語論や計算論は全くしらないワタクシには無理とあきらめ放置を決めていた。

 で、土曜日の昼下がり

Ray工場長:
   10分でR-Fauのトップのデザインを考えてくれ。適当でいい。それをそのままコーディングする。
漣乃鶯:
   おk
(色使いやデザインを打ち合わせ中。。。)
Ray工場長:
   よし、これでやってみるか。じゃあ、コーディングするね。

なんて、流れでトップページのデザインを適当に定めたのだが、どうも気乗りせず、「Microsoft Expression Web 2」を立ち上げただけで終わってしまった。

 で、気が付いたらMeadowにGrassインタプリターなるものを突っ込み、現在にいたる。

 そのインタプリター配布元に「wを一個表示させるサンプル」があったのだが、なにをやっているか全くわからない。

 Wikipediaのラムダ計算のページなどを開いてみたが、これもからきし役に立たん。言語仕様の掲載されたページをみたが、ラムダやらイプシロンやら出てきて混乱は増すばかり。

 さて、どうしたものか。

(次回に続く)

参考サイト:

情報科学若手の会:
http://wakate.prosym.jp/

ちょっと草植えときますね型言語 Grass:
http://www.blue.sky.or.jp/grass/

Brainfuck - Wikipedia:
http://ja.wikipedia.org/wiki/Brainfuck

grass.elのぺえじ(emacs向けのGrassインタプリター):
http://www11.atwiki.jp/s-irie/pages/20.html

Meadow (Windows向けemacsのクローン):
http://www.meadowy.org/meadow/

Microsoft Expression Web 4:
http://www.microsoft.com/japan/products/expression/products/web_overview.aspx

ラムダ計算 - Wikipedia:
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97

深夜ドライブ ~江ノ島のつもりが小田原厚木道路編~

2010/08/14, 02:38

 ご無沙汰してます.工場長です よと.

 なにかの2次試験も終わり,すっかり落ち着きましたので,久しぶりに弟を巻き込み,深夜ドライブに出ました.

 目的地は江ノ島.天気が悪く地元ではペルセウス座流星群が見えなかったので,見えたらイイネで出かけることに.

 ゆったりと相模湾側を走りつづけ,鎌倉を過ぎ,江ノ島の入り口へ.ウィンカーを出して曲がろうとすると.

なぜか,封鎖されている件

 やられた.なにがあったかは定かではないが,パトカー数台が通せんぼしてる.とっさにウィンカーをオフにしてそのまま直進.

 周囲に車が多く右車線に移って転回とかできそうにない.ええい,このままどこまでも行ってしまうか.ということになり,行き先を「小田原厚木道路」のどこかと設定.二宮ICより乗り込み,東名厚木IC,海老名SA,横浜横須賀道路と家路へ.なんか無闇にお金を消費することに.

 とはいえ,久々の高速道路は2人してひやひやしたものの楽しかった.

 最後に,事故にならなくて本当によかった

キャベツ畑で私をつかまえて2010 〜最終章〜

2010/03/22, 23:09

 本来であれば,tomato firmwareの続きを書く予定でしたが,キャベツのシーズンと報告があってちょっと話をそれます.

 さあ,今年もやって参りました.キャベツのシーズン.今年も柔らかく甘い三浦半島のキャベツが採れてます.

 と,テンションを揚げつつ,長靴などギシギシさせながらキャベツを箱詰めする予定でした.しかし,残念ながら今年はキャベツは出荷せず,木曜日に畑を潰すことになりました.

 代々継がれてきた田んぼが畑になり,ついにはマンションになるようです.田んぼだったころから見ている私としては,なかなか寂しいものです.

 というわけで,余裕があればキャベツを抱えて以前在籍した研究室を訪問する予定でしたが,それもかなわなくなってしまいました.

tomato firmwareで遊んでみる<WHR-Gインストール編>

2010/03/19, 00:28

 注意:今回の内容は公式で発表されていることではありません.同じことをして動かなかったとか言われても責任とれません.自己責任でお願いします.

 さて,昨日の続きとか.

 余ったWHR-Gを見ていたら,「ムラムラしてやった.ルータならなんでもよかった.今は反省している.」とかいいつつ,tomato firmwareを突っ込んでみた.

 結果.

 電源ランプのみが点灯し,なにも反応しなくなった.

 WHR-G終了...

 では,困る.3500円が無駄になってしまう.ここで思い返す.過去にbuffaloのルータで正規のファームウェアを当て損ねたことがあった.こんなときはtftpで流し込めばなんとかなっていた.

 ということは,対応できそうなものを当てればいいんじゃない?ということで,対応しているらしいDD-WRTで調べてみると,こんな記事を見かけた.

WHR-GにDD-WRTをインストールする。

 なかを読んでみると,WHR-G125用のファームウェアを当てると書いてある.はてこの型番見たことがあるような...

 tomato firmwareの対応する型番にあるじゃない.ただし,これは特殊らしく別にダウンロードする様になっている.これでなんとかなる.

 早速ダウンロードし,インストール用のbatファイルがなかったので,WHR-G54用の物を流用.すると...

 ちゃんと動いたー.というわけで,我が家にはtomatoルータが2つになりました.これをどうやって使ってみようか...(次回へ続く)

参考リンク:
WHR-G:
http://buffalo.jp/products/catalog/network/whr-g/
DD-WRT:
http://www.dd-wrt.com
WHR-GにDD-WRTをインストールする。 at treffen @ Wordpress:
http://pub.slateblue.tk/server-memo/day97.html