もっとHaskell

東京工科大の講義のアーカイブ、4回目の「リスト」と8回目の「値としての関数」がリンク切れになってた。む〜、残念。
しょうがないのでリストを飛ばして5回目の「リストを扱うプログラム(1)」の途中まで進めてみた。腰が重いので歩みはゆっくり。
ん〜、定義をどんどん並べていくのが関数型プログラムってことなのかなぁ。読めることは読めるけど、発想はなかなかまねできなさそうかも…。

下のプログラムはさらりと例にあげられてたんだけど、かな〜〜りショックでした。
「リストを扱うプログラム(1)」から引用。

isOdd, isEven :: Int -> Bool
   
isOdd n
  | n <= 0    = False
  | otherwise = isEven (n-1)
   
isEven n
  | n < 0     = False
  | n == 0    = True
  | otherwise = isOdd (n-1)

一応1行目だけ説明すると、isOddとisEvenって関数を定義してて、Intの引数を取ってBoolを返しますよってこと。あとは文法が分からなくても想像がつくとおり、奇数偶数の判定を引数を-1しながら交互に呼んでるってこと。
こんな方法、考えたこともなかったですよ!頭打っても、サンダー撃たれてもこの発想は出てこなそう(´・ω・)
関数型プログラミングに慣れていくと、こういう発想になっていくものなの?手続き型とスイッチするとき戸惑わないのかぁなぁ…。なんて変なところに興味津々。
(追記)大学名のミスを訂正。失礼いたしました。