プログラミング初心者がreduceしか見えないのは変なのはわかってるけど・・・

プログラミングの練習をしてたら,配列があって,配列の中身全部の最大公約数を求めるコードを書くことになった。

で,古いPythonだから最大公約数を求める関数はfraction.gcdとして(今だとmath.gcd),

import fractions
from functools import  reduce
list1 = [4,12,28]
reduce(lambda a,b : fractions.gcd(a,b),list1,list1[0])

のようなのしか思いつかない。たぶん重症。

普通のループを書けば良いんだけど,ループを書くのがおっくうといういう病理。

Pythonを使い始めれば少しはその傾向が変わるかと思いきや,あまり変わらない。リスト内包記法でかなりのループがまかなえる,ということに日々気付く方向になってるし。

病理の原因?

最初に使った言語がRだったせいか,普通のループを書くのがずっと苦手。次に使ったのがRubyなので,その傾向が変わるわけもなく。

自分の感覚,たぶんおかしすぎる。

例えば,超初心者の頃から無名関数を使うことにも全く抵抗がなかった。Rのちょっとマニアックな本で,apply系関数に引数にfunction(x){なんとか}でその場で関数の内容をべた書きして与える例を見て感動してから(感覚おかしい!),これは便利ということで抵抗なく使ってるし。。。

その流れでいくとRubyのブロックはごく自然に使えるようになるし,色々使たり本とか読んだりでたりするうちに,関数に関数を渡すという概念も自然になり・・・

世間ではこういうのを関数型になじみのある人っていうんだろうけど,再帰とか全然わかんないし,そんなに数学得意じゃないのにおかしいな。。。

しかし,こういう人が初心者にプログラミングを教えるのはだめだとは思ってる。ほんと,自分の感覚のおかしさにあきれる。