言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

プログラムのシルエット2

http://d.hatena.ne.jp/propella/20070806/p1 の続き。プレゼン版

page1

では今からプログラムのシルエットについて話します。

page2

これは何でしょう。

page3

形のよく分かる影と分かりにくい影があります。

page4

これなんか本体より影の方が分かりやすい。

page5

プログラムにも影があります。よい影はプログラムの条件やループをよく表します。「美しいプログラムとは、美しい影を持つプログラムである」という定義は如何でしょうか?

page6

etoys の影はまあまあです。これは猫が落ちるシミュレーションです。

page7

scratch の影はかなり面白いです。

page8

しかし考えてみると、例えば「猫が落ちる」というシミュレーションでは条件やループはどうでも良い事で、x 座標と y 座標に依存関係が無いというデータの姿の方がよっぽど大切な事です。

page9

データフロー言語を使うと、データの依存関係をシルエットとして表現出来ます。

page10

猫が落ちて下で跳ね返るプログラムです。条件文は ? ブロックを使って記述します。? の入力の上から、条件、真の結果、偽の結果です。

page11

既存のデータフロー言語と違いは?

page12

内部でスタック言語を使っています。

page13

スタック言語を使うと、一時変数を使わないで複雑なグラフを表現出来ます。一時変数の無い S 式では二方向から参照される同じノードを表現できません。また、スタック言語はコンビネータ論理に基づくため、ラムダ代数より簡単にプログラム変換が出来ます。これはデータフロー言語をリファクタリングツールとして使う際に、意味を変えないで表現を変える為に有用です。

page14

副作用やベクトル、行列等を統一的に扱うために圏論を使います。

page15

沢山の要素が跳ね返るデモです。

おまけ: ブックモーフのページを png としてエクスポートする。 Export all pages in a BookMproh.

self pages keysAndValuesDo: [:i :page |
	PNGReadWriter putForm: page imageForm onFileNamed: 'page', i asString, '.png'].