言語ゲーム

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

Twitter: @propella

タイルスクリプト進捗

最初考えていたのは、OMeta と LivelyKernel を組み合わせさえすれば何とか上手く行くのではという事だった。しかし、このようなあり物を組み合わせて何か作るというのは制約が多すぎてさっぱり面白い気がしなかったので、まずはタイルスクリプトで出来るはずの作品を見本として作って、それからどう組み合わせるか考える事にした。

昨日はまずタートルグラフィックスだけ作って、今日はインスペクタを作った。これでオブジェクトに指令を送って観察するという、基本的な枠組みが動いた。この段階で分かった問題点。

  • 名前。javascript からオブジェクトには、グローバル変数を通じてアクセスする。オブジェクト自体は自分の名前を知らない(自分の名前をオブジェクトが知っている事にすると、グローバル辞書と同期を取る手間が増える)。
  • スケジューリング。forwardBy 等が行っている事は、その場でタートルを操作する事では無く、タートル操作のスケジューラへの登録である。ので、条件文を使う事が出来ないし無限ループも使えない。

あと画面構成をどうするかが難関。今考えているのはアランさんの言う GeeMail 形式。GeeMail というのはスクイーク内にコッソリ入っているアランさん専用機能の一つで、テキストとモーフをワープロのように配置出来るという物。etoys の不便なのは画面サイズ決め打ちでコンテンツを作らないといけない所だけど、ワープロのようなフローレイアウトを使えば画面サイズに制約されないし、画面に入りきらなくても大丈夫。随分前から GeeMail みたいな奴を作れと言われ続けていたので、実験としてはいいタイミングかと思う。

タートルはレイアウトの制約を受けずに動き回るので、フローレイアウトと相性が悪い。そこで今回タートルグラフィックの実験で作ったように、ある段落をタートル用の場所にして、段落の範囲だけで動いてもらおう。

フローレイアウトを使ったプログラミング環境としては、老舗の Mathematica が参考になる。Mathematica では、入力行、出力行が基本交互に画面に現れる。入力行は単なる注釈でも良くて、プログラム自体がドキュメントにもなっている。これは etoys とはかなり違うやり方なので、上手く行くかどうかやってみないと分からない。

しかし、肝心のタイルスクリプトはこれからだ。タイルスクリプトの良い所は単純さにあると思うけど、javascript と相互変換可能にする事で単純じゃなくなった。結局今のところスクイークのユニバーサルタイルのような見掛け倒しになっている。アレックスはマクロで解決すると言っているけど、今でさえ難しいのにマクロなんか使うと常人には理解不可能になるんじゃ無いかとびびっています。