Haskellをたしなむ

関数プログラミングを勉強してみる

Haskellの環境整備

Macだとインストーラが存在するため、パッケージをダウンロードして実行するだけ。

Haskell Platform 2011.4.0.0 64bit.pkg

インストール後にバージョンを確認

$ ghc -V
The Glorious Glasgow Haskell Compilation System, version 7.0.4

$ cabal -V
cabal-install version 0.10.2
using version 1.10.2.0 of the Cabal library

念のためアップデート
$ sudo cabal update

対話環境の起動

$ ghci
GHCi, version 7.0.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.

Prelude>

関数の型
::を使って表す
isDigit :: Char -> Bool
isDigit c = c >= '0' && c <= '9'

複数に引数
makeString :: Char -> Int -> [Char]
makeString c 0 = []
makeString c n = c : makeString c (n - 1)

型変換
length :: [a] -> Int
型変数は小文字で書く

リスト

   * リストの先頭に加える
      * 二項演算子(:)を使う
         * > let xs =['b', 'o', 'a']
         * > let ys = 'a' : xs
         * > ys
         * "aboa"
   * リストから先頭要素を取り出す
      * head
         * > head ys
         * 'a'
   * リストから先頭要素を取り除いた残り
      * tail
         * > tail yx
         * "boa"
木構造とハッシュ

型の定義
列挙型

   * data Bool = False | True
   * data Ordering = LT | EQ | GT
      * 右側の値を構成子と呼ぶ(False, True, Lt, EQ, GT)
型変数を取る型

   * data Maybe a = Nothing | Just a
構造体

   * data Pair = MkPair Int Char
      * 構造体 Pair は、型IntとCharを格納する型で、構成子はMkPair
再起型

   * data Tree = Leaf | Node Tree Int Tree
      * LeafとNodeが構成子、Nodeの右にあるTreeとIntは型


関数一覧

   * putStrLn 標準出力
   * zip 二つのリストをペアリストにする
   * map 第一引数に関数を、第二引数にリストを受け取り、各リストに関数を適用する
   * foldl リストの要素を1つの値に集約する
      * 第一引数に演算子、第二引数に初期値、第三引数にリス
関数の引数はカンマではなく、スペースで区切る

0 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...