読者です 読者をやめる 読者になる 読者になる

yy_taroのとりとめのない落書き

メインフレームの導入・設計・構築ができるぐらいの知識があったりする。

すごいH本読んでます。2

最近、Haskellにはまりつつあります。

読む時間を確保するために、ブログ更新がちょっと遅くなっています。

今のところ中間地点まで到達しました。

今日は、改めてHaskellすげーってなったので、この興奮が冷めやらぬうちにその魅力を伝えたいと思います。

突然ですが、逆ポーランド記法って知っていますか?

一般的には、計算するときには中間記法(1+1)で書くところを後置記法(1 1 +)で書きます。

この計算方法をHaskellで実装すると

solveRPN :: String -> Double
solveRPN = head . folds foldingFunction [] . words
where foldingFunction (x:y:ys) "*" = (y*x):ys
      foldingFunction (x:y:ys) "+" = (y+x):ys
      foldingFunction (x:y:ys) "-" = (y-x):ys
      foldingFunction xs numberString = read numberString:xs

これだけで完成です。

たった6行でRPN式が計算できます。

もし、C言語Javaでコーディングとなったら果たして何行必要なのか・・・。

少なくとも6行ではできないでしょう。

さらに上記の処理では、足し引きと掛け算しかできませんが、foldingFunctionを増やしてあげればどんどん拡張できます。

これはかなり驚異的ですよね。

ただし、上記のプログラムは、意図しない入力があった瞬間にエラーになります。

この処理をさらに堅牢にする方法ももちろんあります。(ちなみにまだ、そこまで到達していません)

最近、あちこち浮気していますが、これは読みきろうともりもり進めていきます。

さて続きを読むか。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!