2020-05-01から1ヶ月間の記事一覧

Haskell パターンマッチを学習する

パターンマッチ 引数の値による条件分岐が行える。オシャレ。上から条件に合った式が見つかれば、以降の式は評価されない。 lucky :: Int -> String lucky 7 = "lucky number seven!" lucky x = "out of lucky" ghci> lucky 2 "out of lucky" ghci> lucky 7 …

Haskell 型変数と型クラス

型の確認 ghci> :t 'a' 'a' :: Char ghci> :t 1 1 :: Num p => p ghci> :t "string" "string" :: [Char] ghci> :t True True :: Bool ghci> :t [1,2] [1,2] :: Num a => [a] ghci> :t (1,2) (1,2) :: (Num a, Num b) => (a, b) 関数の型宣言 文字列を受け取…

Haskell タプルの取り扱い

タプル タプルはサイズ固定だが、違った型を収めることができる。 ghci> (1, 3) (1,3) ghci> (1, 'a', "Hello") (1,'a',"Hello") サイズが違ったタプルは違った型として解釈する。 ghci> [(1,3),(4,5,6)] <interactive>:103:8: error: • Couldn't match expected type ‘(a</interactive>…

Haskell リスト内包表記

Haskell リスト内包表記の整理。 <-でリストの各要素を束縛する。|以前の記述はリスト内表記の出力を表す ghci> [x*2 | x <- [1..10]] [2,4,6,8,10,12,14,16,18,20] フィルタリングして束縛することも可能。 ghci> [x*2 | x <- [1..10], x*2 >= 8] [8,10,12,…

Haskell 関数の定義とリスト操作関数

最近、Haskellの入門書を読んでいて、読んでる最中はなるほど!っと感動するんだけど、読んだ端から忘れていってしまうので、最初から読んだことをメモしておく。 一応、復習にもなるかな(^_^;) 演算の順序指定 ghci> 1 + 2 * 3 7 ghci> (1 + 2) * 3 9 関数…

PlayFramework Actionメソッドを拡張した独自アクションを作成する

例えば、各コントローラー、メソッド単位で認可の判断をする場合など、メソッド側にパターンマッチを書いてももちろんいいんだけど、以下のようにActionメソッドを拡張したメソッドに渡して透過的に確認することもできる。 def index() = SignedAction{ impl…

PlayFramework Anormを使用してDBへ問い合わせを行う

AnormはJDBCインスタンスを利用して、シンプルなDBレコード操作を提供する。 JDBCで書くSQLとの違いは、 ScalaオブジェクトにマッピングするParserを定義することで、ユーザが定義したcase class型のListを作成することが簡略化できる。 PreparedStatementの…