いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

落ち穂拾い(2)自分自身を印字するプログラムなど

①自分自身を印字するプログラム、という話があります。例えば……

Pythonで、

print(123)

を実行すると

「123」という数値が表示されるだけです。つまりこのプログラムは自分自身を印字するプログラムではありません。

print('print (123)')

では

「print (123)」

と表示されてしまいます。要するに、一筋縄ではいかないのです。でもいろいろ考える人もいて、数十行のプログラムで目的を果たすものもあるようです。

 これについてぼくは「自分自身を印字するプログラムの存在定理」の証明を読んだことがあります。「不動点定理」として説明されていた記憶が(f(x)=xの解だから!)。『計算可能性入門』(小林孝次郎1980近代科学社)にあったと思います。でももう手元にありません。読み直してみたい……。表示される記号を数値で表現し、……とやっていたような。存在定理ですから、具体的なプログラムはこう書きましょう、などと教えてくれるわけではありません。それでも「おお、そういうプログラムは確かに存在するんだ!」と感心しましたし、そんなことを証明できること自体にも驚きました。

 普通に数学を勉強していてもこんな感じの話は出てきませんよね。そんなプログラム、役に立たないからかな……。位相幾何なんかで不動点定理というのはありますが。でも 無条件に面白い気がします。

 ②対数を使って2の1000乗の桁数を求められるか、という記事を書きました。 

www.omoshiro-suugaku.com

どうやら定期試験などで1999乗までなら100乗、150乗、200乗など、狙われそうな指数については正しく計算できそうでした。でも2020年なので2020乗とか、9月20日の試験なので920乗とか、そういう問題は出るかも……!! と後で気づいた……。

③今は読み取りソフトが付属しているのでしょうが、昔はマークカードリーダーの説明書にBASICのプログラムが載っていて、ユーザーがそれを実行する(適切な環境でプログラムを書いて、実行する)ようになっていました。そうすることでカードリーダーがマークシートを1枚1枚送って読み取ります。パソコンとカードリーダーはRS232Cケーブルでつなぎ、プログラムからしかるべきところ(ポート)へタイミングを考えてコマンド(と言っても単なる決まった数値)を送信します。

 OSがWindowsに替わり、自分でプログラムを書いてカウンタも表示してファイルも自由に選べるようにして……とやっていましたが、結構面白かったです。パソコンと機械がつながっていて、その機械の動きをプログラムでコントロールできるのが楽しかったのだと思います。プログラミングはそれだけでも面白いのですが、さらに面白くなります。というわけでラズベリーパイを買おうかどうしようか迷い中です……。