[Japanese version] [English version]

Web ページとプログラムの自己再生産
-- 階層型メニューなどへの応用 --

ここでは,Web ページがふくんでいる JavaScript プログラムをつかって その Web ページとまったく同一またはほとんど同一の Web ページを生成・ 表示する方法と,この方法のもとになっているプログラムの自己再生産 (自己印刷) について説明します.また,その応用として階層型メニューなどを とりあげます.一部の例は JavaScript プログラムの再生産を必要とするので, その機能をそなえている Netscape Navigator だけで動作し,Internet Explorer では動作しません (IE 6.0 ではほとんどの例は動作しません). また,Navigator 3.0 や 6.0 では一部の例だけ動作します. Opera 7.1 では,戻り (back) ボタンを使用しないかぎりは, すべてが意図したとおりにうごきます!

■ せっかちなひとのために

「いそがしくて,こんなながいページはよんでられない」という ひとのために,この方法でなにがやりたいのか,例をあげましょう. (このページにもどるには「戻る」というメニュー項目をつかってもだめで, 直接このページを指定して「ジャンプ」しなければならないので,ご注意!!)

なに?! 「ただの Dynamic HTML じゃない」 ですって? ちがうんです!!

■ プログラムの自己再生産って,どういうこと?

このページのメイン・テーマは Web ページの自己再生産ですが,まず, そのもとになっているプログラムの自己再生産または自己印刷について説明します.

自己再生産するプログラムとは,そのプログラムを実行させると,その結果として その (ソース) プログラムと同一のプログラムを出力するプログラムのことです. たとえば,Marius (marius@digicash.com) がおくってくれたつぎの C プログラム は,自己再生産するプログラムです (このプログラムの原作者は不明です).

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34 );}

もちろん,Perl でもつくれます: 例 1例 2例 3. (これらはこのページの著者の作品.もっと Perl らしいプログラムにすれば, ずっとみじかく,かけます).

Pascal では,東大名誉教授の和田英一先生がかいたプログラムがありますが, ほかの例もふくめて,興味がある方は有澤先生の本 を参照してください.

■ Web ページの自己再生産って,どういうこと?

プログラムをふくまない (参照しない) Web ページが自己再生産することは ありえませんが,Web ページはスクリプト言語のプログラムをふくむ (参照する) ことができるので,それをつかえば自己再生産の可能性があります. 残念ながら Microsoft の Visual Basic ScriptJScript ではスクリプトをふくむページを出力することができないので,スクリプトの 再生産を必要とするタイプの自己再生産はできません.しかし,Netscape の JavaScript をつかえば, (JavaScript の言語仕様書ハンドブック にはそれができるかどうか書いてありませんが) JavaScript のプログラムをふくむ Web ページを出力することができます.

完全な再生産

上記の機能をつかって Web ページを自己再生産することができますが,その 基本である完全な再生産の例をしめします.下記のリンクをたどったときに 表示されるボタンをおすと,まったくおなじボタンが表示されます.

でも,完全におなじページが表示されたのでは,なにがおこったのか. わかりませんね :-)

不完全な再生産

そこで,すこしだけちがうページが表示される例をあげてみましょう. どの例も,表示されるボタンをマウスでクリックすることで動作します.

これらの例は,もちろん,実用をめざしたものではありません.ラジオボタンや チェックボックスがつかいたいのであれば,通常は HTML のフォームをつかった ほうがよいことはいうまでもありません.

■ Web ページの自己再生産で,なにができるの?

完全な自己再生産はもののやくにはたちません.しかし,不完全な再生産は, Web ページのみかけを変容させる目的で,いろいろ,つかえる可能性があります. このページの最初にしめした 2 つの例はその一部です.

でも,このくらいのものは Dynamic HTML [MS 97] [NS 97] でも実現可能です.そのうちにそれらでは 実現できない例をかんがえたいとおもっています.

■ Web ページの自己再生産ってなにがおもしろいの?

Web ページのみかけをかえられることももちろんおもしろいのですが,それ だけでなくて,Web ページを自己再生産することじたいがおもしろいわけです. これはフォン・ノイマンの「自己増殖オートマタ」にもつうじていて, 生命や人工生命をおもいおこさせます.

■ もっとくわしい情報

このページより詳細な情報がしりたければ,論文 [Kan 97a], [Kan 97b] を参照してください.

■ 参考文献


著作 (C) 1997, 1999 金田 泰 (yasusi @ kanadas.com)
作成日 : 1997-10-19, 最終改訂日 : 2003-10-19