第2回静岡Developers勉強会 Haskell読書会に参加しました。

第二回Haskell読書会開催のお知らせ - 静岡Developer's 勉強会に参加した皆さんお疲れ様でした。
http://farm3.static.flickr.com/2722/4391099137_d99f03ea89.jpg
今日の講義で私が取ったメモとそれに対するコメントを残しておきますので、ご参考にしてもらえると幸いです。
*1

  • hugsで処理系での実行
    • Hugs> :type "2"
    • "2" :: String
  • 別の処理系での実行
    • :type "2"
    • "2" :: [Char]

処理系によってCharのリストとして認識する場合もあるんですね。

StringはCharのリスト

へぇー。

  • 固定精度整数Int
    • 32bitで表現できるのは-2^31<= x < 2^31
  • Stringを要素に持つリスト

Charのリストを要素に持つリストになるんですね。教科書と違うなぁ。

  • Stringを要素に持つタプル

こちらも、Charのリストを要素に持つリストになります。
Hugsでは要素になるとCharのリストになるらしいです。

  • クラス制約をする多重定義型の例
    • Hugs> :type (1,[2,3],[4,5,6],7)
    • (1,[2,3],[4,5,6],7) :: (Num a, Num b, Num c, Num d) => (d,[c],[b],a)

第3章の代表例のようなものですね。

--無限のリストを作成するhaskellプログラム
myadd :: Int -> ( Int -> Int)
myadd x y = x + y

unlimlist :: Int -> [Int]
unlimlist n = n:(unlimlist (myadd n 1))

terminalがすごいことになりますね。

  • :(コロン)の演算子は「リストの先頭に要素を追加する」
    • Main> 1:[2,3]
    • [1,2,3]

なるほど。

  • ¬(否定演算子)はnotで書く
    • Main> :type not
    • not :: Bool -> Bool

ここ、聞きたかったんです。巻末の付録Bに記載がありましたね。

  • 関数とは
    • 「1つの引数の型をもらって、一つの型を返す」のが関数の定義です。
    • 途中で引数を一つとった内部的な関数が生成されている。
    • myadd x y = x + yを考えると、((myadd x) y)というイメージ
      • (myadd x)は一つの引数を取る関数であるため、yを引数として取る。

-letはhugsでは使えない>

*1:講義の中でも出ましたが、議事録を次回の読書会の前に読み返すと、意味がよく理解できるようになっているのに気づきました。