研究

現在、カテゴリ「研究」の投稿記事を表示中です。

ご希望の取引を押して下さい、あるいは数値と数字

金欠になって銀行の現金自動預け払い機の前に立ったら、機械にこのように言われました。トムソーヤが自宅の塀のペンキ塗りをさせられたときに、友人にペンキを塗らせてあげる代償に、彼のリンゴをせしめたのが取引です。タッチパネルが表示する預け入れ、引き出しなどなどは数種類の取引をアイコンとして表示した仮想的なボタンのことです。

プログラミングの世界ではこのような違いを意識することは大切です。プログラムの中の1101と”1101″とメモリのなかで1101という数に対応したデータの違いは熟練したプログラマにはわかるものの、初心者にはなかなか理解が難しいところです。簡単に言えば、数字と数値の違いということなのですが、現金自動預け払い機のときほど明確な違いとして理解しにくいです。

数値としての1101 (たとえば、1100 という自然数値の次の数値)と文字列としての1101 (たとえば、11という文字列に続けて01を連接した文字列)を両端の引用符の有無で区別するのは、すべてをテキストで表現することが求められるプログラミング言語の不自由なところです。

ヴィジュアルプログラミング言語のひとつの可能性はこのような明確に異なるものを明確に表現し分けることができる点にあります。

pTeX の太文字

今年も科研費申請のシーズンです。ぼくは pLaTeX で原稿を準備しているのですが、最近、ぼくの環境の pTeX で日本語の太文字が目立たなくて悩んでいました。研究費の申請書の目立つ箇所を太文字にしたいのですが、\emph {ホゲホゲ} とやっても、明朝体がゴシック体にはなるものの、あまり太くないためにまるで目立ちません。審査官の先生は忙しいために短時間で頭にはいるような申請書を作るように指示を受けているのだけど、強調箇所があまり強調されないのは困ります。

これまでは、さほど困っていなかったので放置していたのですが、来年度、研究費を受けられるか否かがかかるわけだから、真面目に対応することとしました。

結果から言えば、何度かググったら対応方法が見つかったので簡単でした。以下のWikiがお世話になったサイトです。

どうもありがとうございました。

で、僕がやったのは以下です。Mac OS X を使っているから hiragino を設定したんですよ。他の環境を使っている人は別のフォントを指定して下さいね。

sudo updmap-sys --setoption kanjiEmbed hiragino

この設定だけで、強調箇所がとても黒々とした頼もしいフォントとなりました。

審査官のハートを射止めますように。


文芸的ウェブプログラミング

学会発表の準備で文芸的プログラミングについて調べているうちに、自分でも一度、やってみないといけないと思いたち、ちょっとやってみました。

使用したツールは”nuweb”です。MacPorts でさくっとはいりました。まずは以下を見て下さい。

文芸的ウェブプログラミングの例題へ

中央の「Hi!」ボタンはもちろんだけど、左上のリンクをクリックするのをお忘れずに。ここを見ないと文芸的の意味がないですから。

続きを読む »

頭にはいるコードの大きさって?

今朝は、ビジュアルプログラミングとの関連で、”tex.web” というプログラムを斜め読みしています。

そこでひとつの発見をしたかもしれません。バグのないコードは短いです。少なくともKnuthのTeXは。TeXのプログラムは1,379個のモジュールから構成されていますが、そのうち8個の例外を除いてすべて1ページに収まっています。それも、コメントどころではない非常に詳しい解説つきで。

なにが言いたいのかというと、プログラムは一画面で見渡せる程度の規模のモジュールの組み合わせから作るべきだということです。で、それがどうしてビジュアルプログラミングに関係するかと思ったら、それは先を読んで下さい。
続きを読む »

解体JAKLD初日

JAKLDは京大の湯浅先生が携帯電話のJVMで動作させることを狙ってお作りになったSchemeもどきのLispです。先日、開催されたばかりの情報処理学会プログラミング研究会でほぼ二年ぶりにお会いしたときに、JAKLDの名前の由来をお訊ねしたのですが、そのご返事に唖然としてしまいました。ちょっと考えてみて下さい。

続きを読む »

JS/CC for V8/Unix

少し苦労したけれども Mac OS X の上で Google V8 を使って、構文解析器生成系の JS/CC を動かすことに成功した気がします。以下は自分のためのメモも兼ねた簡単な説明です。
続きを読む »

JS/CC のサンプル

JS/CC のサンプルファイルが少しみにくかったので、ちょっと整形してみました。まずは文法定義ファイル(calc.grammar)です。LALR パーザを使った方ならば、だいたい理解できると思います。サンプルの文法定義ファイルにやたらに使われていたTABを除去し、構文解析木のドライバルーチンを除去しました。

続きを読む »

JS/CC: 構文解析器生成系

JS/CC は JavaScript 用のコンパイラ生成器で、字句解析器生成系と構文解析器生成系が一緒になっているようです。JavaScript の実装としては、ウェブブラウザに組込まれたもののほか、Microsoft JScript, Mozilla Rhino, Mozilla SpiderMonkey, Google V8 など主要なものに対応しているようです。

続きを読む »

4時間で書いたインタプリタ (300 LoC)

ちょっと研究上の都合から、小さな小さなインタプリタを書く必要性が生じました。作ったプログラミング言語の拡張 BNF はこんな感じ。

program ::= (command ;) *
command ::=
    | <変数> = e
    | <変数> := e
    | if e then { (command ;) * } [ else { (command ;) * } ]
    | while e { (command ;) * }
    | print e
    | dump
e ::= <整数> | <変数> | unary e | e binary e
unary ::= -
binary ::= + | - | * | / | % | = | == | <> | < | > | <= | >=

全部でぴったり 300 行です。バイト数が 8,837 というのはつまらなかった。コメントでも書いて 8,888 バイトにすればよかった。Objective Caml を使いました。ビルドには OMake を使っています。

よかったらzip を公開してますので拾って行って下さい。ダウンロードされた方はコメントしてね。LALR 文法の shift/reduce 衝突が 13 個も出るので文法記述のお手本にはなりませんね。S 先生@東工大かN 先生@筑波大にお願いして直してもらおうか。。。


PPL 2010 プログラム発表

PPL 2010 のプログラムが発表されたようです。うちの研究室からは初日の晩のポスターセッションで三つの発表をします。

  • 非S式言語における構文マクロの実現に向けて ー 荒井 浩,脇田 建
  • JavaScriptアプリケーションのLive Edit開発環境 ー 吉永 卓矢, 脇田 建
    デモやります!
  • 関数型言語におけるべイズデバッグ ー 津田 均, 脇田 建

ちょっと詳しい内容については以前にこのブログで紹介しました。


« 古い投稿