marg-do's

関数型生活

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

ラッパーオブジェクト

js>var s = "test"; js>s.len = 4; js>typeof(s.len) undefined なぜこのようなことになるのでしょう? js>var s = "test"; この段階では、sは文字リテラル"test"自体を指している。 js>s.length; s.lengthは(new String(s)).lengthと解釈され、新たなオブジ…

簡単な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]とす…

lambda関数のつくりかた

メモ a = ->(x){x*2} b = lambda{|x| x*3} a.(3) #=> 6 b.(3) #=> 9