垂れ流す思考

思考を垂れ流しアウトプットを行うブログ

ふつうのHaskellプログラミング 第1章

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング

噂のすごいH本を読んで楽しくHaskellを学んでいこうというコンセプト

会社のHaskellerさんに
「関数型素人がすごいH本で入門すると中盤で詰むよ」
「初めてならふつうのH本からがおすすめ」
ということなので『ふつうのHaskellプログラミング』からやっていこうかと。

ふつうのH本とすごいH本の比較

おすすめされた時に理由を聞くと上記の通り。
特に関数型も知らない人がいきなりすごいH本をやると説明がなくて混乱するそうです。
確かにすごいH本の冒頭やってましたが、 リスト内包表記とか当然の権利のように出てきますがモヤモヤしますよね? 説明ないし。

それに比べてふつうのH本は手続き型プログラミング言語をやっている人でもHaskellをふつうに使えるがコンセプトなので、 Haskellはなぜいいのか?みたいな疑問に答えていくような感じ。
特に第一部の一章でしっかりHaskellの何がいいのかを説明しているので頑張れそうですね。

第1章 Haskellプログラミングを始めよう

Haskellの長所

  • 柔軟にプログラミングできる
  • コンパイル時の型チェックが強力
  • 読みやすい
  • 遅延評価が基本

以上の四つだそうです。遅延評価が聞きなれないですね。
ちなみに遅延評価の詳しい説明は第5章だそうです。

普段はRubyJavascriptしかやっていないため、型チェックがあるのがかなり新鮮です。
コンパイルするとしっかりエラーチェックしてくれるのは嬉しくなりますね。(脳内擬人化すると色々捗る)

とりあえずこの章ではHaskell遅延評価が基本になっているのが強力とのことだ。

# Rubyファイル
def sum(x, y)
  p 'add'
  x + y
end

def sub(x, y)
  p 'sub'
  x - y
end

def multi(x, y)
  p 'multi'
  x * y
end

p add(1, sub(2, multi(2, 3)))

上記のRubyコードを実行すると以下になります。

% ruby test.rb
"multi"
"sub"
"sum"
-3

これは1 + (2 -(2 * 3))このようなイメージ。
実行順も後ろから評価されていっているのがわかるでしょう。

遅延評価だと sum -> sub -> multiと必要になった順で評価されるらしい

本当はRubyファイルをHaskellで書き直したかったけどそもそも出力する方法がまだわからない...
先は長い。

そしてこの遅延評価がどれくらい便利なのかはまだわかっていない。
第5章で説明するそうなのでそれまで色々考えておこう。

第1章終わり

余談

ちなみに『ふつうのHaskellプログラミング』はすでに絶版?なので新品がありません。
ただこの書籍購入で知ったのですが、Amazonにはオンデマンド(ペーパーバック)というものがあります 。 オンデマンドはAmazonが注文を受けた後に製本して発送するサービスで、
ペーパーバックとは洋書とかである表紙が別れないやつ(ちょっと安っぽいやつ)になります。

中古本が嫌だけど新品置いてないって人は、紙質は悪くなりますがオンデマンドを選択してみては?

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門