大学3年生による、自然数のケタ数求め
ある自然数が変数nに入っている。nは何桁の数かを求めるプログラムを書け。
自然数の桁数 - 日記を書く [・w・] はやみずさん のところで書かれていた内容↑
を見て、真っ先に考えた内容が、以下のコード。
ketasu(int n){ int i; for(i=0; n>0; i++) n /= 10; return i; }
しかしこんなコードを載せた日にはもう何らかの意味で敗北したようなものである。
はやみずさんの記事に載っているコードは全て一行で、処理が一瞬で分かるほど見た目が良い。それに対してこのコードは実に無様。int i;という宣言がまず無様だ(あっやばい動的型付け言語に感覚が汚染されてる)。
それより何よりこのアルゴリズムが面白くも何ともない。10で繰り返し割っていくだけ。実にストレート。
アルゴリズムは変えようがないにしても、ちょっとした小細工を施すことで見た目を取り繕おうと思い、
(defun ketasu (num) (if (>= num 1) (+ (ketasu (/ num 10)) 1) 0))
今日、Common Lispで書いてみた。
はやみずさんの記事のコメントを見ると、なんでもlogでやるのは何かしらの問題があるらしい。10で繰り返し割っていくという方法は、意外にも決して冗長というわけではなかったみたい。
こうやってC系言語とCommon Lispを両方書いてみると、確かに色々違うんだなと肌で感じる。
プログラミング言語はプログラムを記述する言語だという側面と、思考の仕方を決める道具だという考え方とでは、やはり思考の仕方を決めるという効果の方が大きいと思う。
プログラミングパラダイムは良いね。プログラミングパラダイムは心を潤してくれる。