marg-do's

関数型生活

Haskell

なぜかcabalでvectorがインストール出来ない

cartazio comments on Anyone running GHC 7.6.3 on OSX Mavericks? brew install libiconvして cabal install pandoc --extra-lib-dir=/usr/local/Cellar/gmp/6.0.0a/lib

HaskellのWebフレームワークSnapで簡単セッション管理

HaskellのWebフレームワークといえばYesodですが、今回は勉強目的も兼ねてよりライトなフレームワークSnapを試してみます。 commitSessionを忘れていて結構手間取ったのですが、一度覚えてしまえばシンプルに使えていいと思いました。 開発環境 OS X 10.9.3 …

簡単なechoプログラム

myecho.hs import System.Environment main = do args <- getArgs putStrLn $ foldr (\x acc -> x ++ " " ++ acc) "" args $ ghc --make myecho $ ./myecho Hello World Hello World

型についてメモ

data Shape = Circle Float Float Float ghci> :t Circle Circle :: Float -> Float -> Float -> Shape ということで、値コンストラクタは関数。 ghci> :t Circle 2 1 Circle 2 1 :: Float -> Shape 部分適用もできる

Lispのassocみたいなもの

assoc :: Eq a => a -> [(a, b)] -> Maybe (a, b) assoc itm [] = Nothing assoc itm lst = if (fst tpl) == itm then Just tpl else assoc itm $ tail lst where tpl = head lst 追記 畳込関数を使った方が分かり易い assoc :: Eq a => a -> [(a,b)] -> May…

関数適用関数の使い方

Haskellには関数適用演算子(関数)が定義されている。 ($) :: (a -> b) -> a -> b f $ x = f x右結合で優先順位が低いため、括弧の省略に有用だ。次のような使い方もできる。 ghci> map ($ 10) [(+ 3), ((-) 3), (* 3), (/ 3)] [13.0,-7.0,30.0,3.333333333…

畳込関数foldrとfoldl

右畳み込み関数foldrは次の様な挙動をする。 ghci> foldr f acc xs (※xs = [x0, x1, x2, x3, x4]とする) f x4 (f x3 (f x2 (f x1 (f x0 acc)))) また、左畳み込み関数foldlは次のような挙動をする。 ghci> foldl f acc xs (※xs = [x0, x1, x2, x3, x4]とす…

高階関数の合成

今勉強している、プログラミングHaskellに載っていない(?)ようなのでメモ。 Prelude> filter even (map (*3) [1..15]) [6,12,18,24,30,36,42] Prelude> filter even $ map (*3) [1..15] [6,12,18,24,30,36,42]

CentOSにHaskell開発環境を構築してみる

最近Haskellを勉強しているのですが、開発環境をVM上にまとめてしまおうということでやってみました。 実行環境など CentOS 6.4 GHC 7.6.3 Haskell Platform 2013.2.0.0 ghcをインストール 現時点で最新のghc7.6.3のソースURLをGHC: Download version 7.6.3…