日別アーカイブ: 2017年2月27日

再帰的呼び出し

プログラム言語でPASCLと言う言語があります

PASCALは再帰的呼び出しが出来る言語仕様を持っています。

むかしNECのPC-8001を持っていた頃に、Z-80と言う8ビットCPUを搭載したこのPC-8001で、PASCAL言語の入門レベルの練習をしたことが有ります。今のCPUから考えれば、当時に、このクラスのCPUで、しかも搭載メモリーはRAMが32Kバイトなのに、PASCALが動いていたってすごいなーと思います。

 

※正確にはPC-8001には、Z-80互換のNECのCPU[μPD780C-1  4MHz]が搭載されていたそうです。

PASCALを勉強し始めたとき、TK-80でのマシン語+ニーモニックとPC-8001のBASICしか経験が無い私は、PASCALのグローバル変数とローカル変数で、ちょっとこんがらがって、しまいました。さらに再帰呼び出しをやると、変数がどうなるの?上書きしないの?とか、そういう疑問を持ちました。ステップ毎に、各変数の中身を表示させてどう変化するかを見たりして、徐々に納得したような記憶が有ります。

当時私は、「PASCALを作られた方々って、すごいなー」と感動しました。

 

PASCALでは、良く練習問題になる「ハノイの塔」

ハノイの塔パズルを解くプログラムを作る時に、 そのアルゴリズムをPASCLで再帰的呼び出しを使って記述する様子を、判りやすく解説して居る動画が無いか検索して見まさした。

が、あまりピント来ない動画が多い様です。

普通に検索してみても、ピタッとくるサイトが見つかりにくい感じがします。

すっきりしなくてすみません。

さて、プログラムに興味の無い方は、「再帰呼び出し」に興味が持てないでしょうし。現在現役のプログラマさんは、常識的にご存知でしょうし、わざわざ書く話題でもなさそうに、思いつつ…。

あるアルゴリズムをPASCALの再帰呼び出しを使って記述すると言う事自体がパズル的ですから、ハノイの塔と言うパズルの解を求める目的でプログラムを記述する、このプログラミング作業自体がパズル的でもあり、それが、おもしろいと思うのです。

やわらか頭とか、水平思考とか、その手が有ったか、とか、問題解決へのアプローチの数々、過去の大勢のプログラマの試行錯誤の結果が、世の中に溢れるプログラムされたコードには沢山埋まっていて、他人のコードを読むと言うのは、とても自分では思いつかないような、様々なアプローチを見るチャンスです。

つまり、推理小説やSF小説や、エッセイや、書物を読むのと同じで、他人の経験を共有するチャンスです。

チャンスですが、でもすっごく時間がかかってしまったりします。

また、問題は、自分の慣れていないプログラム言語を読みこなせないとか、自分のなれていないプログラムスタイルを読むと疲れるとか、または大勢で製造されたソフトウェアはそのチームの文化を理解していないと、読みこなすのが大変だとか。ソースコードやその類の物を読もうとすると、若干そういう問題が有ります。

コンパイルされた後の、マシン語なり、中間言語なり抽象表現になってしまったコードを読むのはその特性から、大規模なパズルをとくようなもので、とても大変であり、大規模な解析システムを使いこなさないと出来ないと思えます。

大規模な解析システムを使いこなせるなら、ソフトウェアの大企業で、デバッグのお仕事をバリバリこなせるはずなので、大企業のエリートとして、高給取りになるのも夢ではないと思いますけど、大変だろうなーと思います。

と言う事で、PASCALの再帰呼び出しで、パズル「ハノイの塔」を解くプログラムをプログラミングするとか、その内部の挙動を頭で正確に把握すると言うのは、将来に向けての第一歩になると思います。

どこかで、どなたが書いておられたのですが、プログラマーの中には、プログラムを、やり始めると、ついつい没頭して行って、仕組みを頭の中に作り上げていく日々の中、どんどん、生身の人とのコミュニケーション能力が落ちていくのが、自分自身で良く判る。と言うタイプの方が居られる様です。

いろいろな人の話を読みますと、「完全に仕事のことを忘れて、家族と過ごしたり、散歩していると、ふと、突然、解決策が、天から降りてくる。」と言う方も居られる様です。

いろいろな方が居られる様ですが、プログラマの方は、真っ当な社会生活を送れなく成っちゃうといけませんから、注意が必要かも知れません。

1万時間の法則とか、良く聞きます。1日7時間で1万時間はどのくらいになるか計算すると、ほぼほぼ4年くらいになり、一日8時間で計算すると3年半とか、そういう数字になるでしょうか。

石の上にも三年とか。

桃栗三年柿八年とか、継続こそ力なり、なのかも知れません。