3の倍数と3のつく数

3の倍数と3のつく数を求めるプログラム。

プログラム名: three.hs
three xs = [x| x <- xs, or [mod3 x, num3 x]]

mod3 n | (n `mod` 3) == 0 = True
          | otherwise = False

num3 0 = False
num3 n | n `mod` 10 == 3 = True
          | otherwise = num3 (n `div` 10)

実行例
Main> three [1..50]
[3,6,9,12,13,15,18,21,23,24,27,30,31,32,33,34,35,36,37,38,39,42,43,
45,48]

プログラム1行めの集合(リスト)の内包的定義の | の右の定義部分では、集合(リスト)xs の指定の後で、要素 x の満たすべき条件をコンマで区切って並べることができる。

プログラム4行目と8行目のガードの otherwise だが、otherwise = True (つまり、Trueの別名)なので上のガードのパターンマッチが失敗した場合に最後に実行される定義を記述するときに使う。

Haskellの解説書が難しいのは、それが、プログラミングを学問として研究している人やプロのプログラマーによって書かれているからではないだろうか。そういう人たちの興味の対象は言語としての性能や厳密さや実装など、プログラム言語についての高度な内容だ。

しかし、趣味のプログラマの興味はいかに容易に自分のアイディアをプログラムの形に実現できるかということであって、難しい理論はできれば避けて通りたいのだ。Haskell によるプログラミングは、対象(例えば数遊びのような)を選ぶと手続き型のプログラムより直観的に理解できる性質がある。素人が理解しやすいような視点からの Haskell の解説書がでれば、Excell のようにプログラマ以外の領域にユーザが増えるのではないかと思う。

スローガンになってしまったが、Haskell は難しくない。難しいのは Haskell の解説の方なのだ。
[PR]
by tnomura9 | 2009-08-26 03:13 | Haskell | Comments(0)
<< モノイド 平均 分散 標準偏差 >>