2回目のHaskell

奇跡的に2回目突入(ぇ まあもちろん書けそうなサンプルを選んできてはいるんですけどね(^^; まあとにかく書きまくって経験を積むのが目的なのでサンプルを選り好みするのも挫折することに比べたらはるかにマシ!!と開き直ってます。

さて、今日のネタは"horner.c"です。やはりなでしこでのサンプルと同じですので詳しくはそちらで。まあそちらもあまり詳しく書いてませんが(ぉ
今回は嬉しい(?)ことにリストが出てきます。リストといえばHaskellの醍醐味(?)ですね!そんなわけでリストの処理に挑戦しました。

main = print ( horner 2.0 [1,2,3,4,5] )

horner :: Double -> [Double] -> Double
horner _  []    = 0
horner x (n:ns) = n + x * horner x ns

やっぱり実質2行しかない。Hakellすげー(汗
ちなみに今回驚いたのが1回でうまく動いたこと。や、使いなれたC++ですら1回で動くことなんて滅多に無いのに・・・。ひょっとして才能ある?(ぉ
書く前は元のプログラムが逆方向のループだったので難しいかな?と思ったんですが、Haskellには順方向だろうと逆方向だろうと殆ど関係ないですね。パターンマッチングでマッチした部分で書き分ければいいだけなんですよね。

普通に関数を書く程度ならちょっとだけ慣れてきて面白くなってきました。このまま続くといいなぁ〜。