TrueLogic 仕事日記 このページをアンテナに追加 RSSフィード

2013-02-03Stateモナドで信号器

Stateモナドを使って信号器を書いて見た.ログの内容を伝搬(追記)させるには,bindに手を入れるしかないのかな?

import Control.Monad.State

data Signal = Green | Yellow | Red deriving Show

move :: State Signal String
move = state $ \s ->
  let f = show s ++ "==>" in
  case s of Green -> (f ++ "Yellow", Yellow)
            Yellow -> (f ++ "Red", Red)
            Red -> (f ++ "Green",Green)

moveMainp :: State Signal String
moveMainp = do
  move
  move
  
main :: IO()
main = do
  putStrLn $ show $ runState move Red
  putStrLn $ show $ runState move Green
  putStrLn $ show $ runState move Yellow
  putStrLn $ show $ runState moveMainp Red
  putStrLn "Done."

実行結果


$ ghc traffic-signal
$ ./traffic-signal 
("Red==>Green",Green)
("Green==>Yellow",Yellow)
("Yellow==>Red",Red)
("Green==>Yellow",Yellow)
Done.

トラックバック - http://specverification.g.hatena.ne.jp/n757uf/20130203

2012-03-11SEAフォーラム「実用期を迎えた関数プログラミング」講演者スライド

3/5のSEAフォーラム「実用期を迎えた関数プログラミング」講演者スライドのリンク一覧です.

小笠原さん

http://www.itpl.co.jp/tech/func/essense_of_fp%28sea0305%29.pdf

山本さん

http://mew.org/~kazu/material/2012-yesod.pdf

酒向さん

http://www.slideshare.net/ardbeg1958/ss-11889115

水嶋さん

動的プレゼンテーションにつきスライドはなし。

Twitter つぶやきのまとめ

http://togetter.com/li/270508

トラックバック - http://specverification.g.hatena.ne.jp/n757uf/20120311

2012-01-30SEAフォーラム「実用期を迎えた関数プログラミング」のお知らせ

3月15日(月)に大崎で「実用期を迎えた関数プログラミング」と題したフォーラムを開催します.キーノートスピーカー,パネリストには豪華メンバを揃えましたので,皆様のご参加をおまちしております.

http://sea.jp/?p=895

トラックバック - http://specverification.g.hatena.ne.jp/n757uf/20120130

2010-04-04SPINモデル検査入門を翻訳出版しました

具体例が多く,仕事で使うようなモデルを作るには良い参考書となるのではないかと思っています.よろしれけば読んでみてください.

SPINモデル検査入門

SPINモデル検査入門

http://www.amazon.co.jp/gp/product/4274208443/ref=ord_cart_shr?ie=UTF8&m=AN1VRQENFRJN5

トラックバック - http://specverification.g.hatena.ne.jp/n757uf/20100404

2010-02-13Real World Haskell 3章の練習問題のつづき

Real World Haskell 日本語版 p72

6. サブリストの長さでソートする

import Data.List
mySortSubList :: a? -> a? 
mySortSubList a = sortBy myCompareListLen a

myCompareListLen :: [a] -> [a] -> Ordering
myCompareListLen a b = compare (length a) (length b)

7. リストのリストを連結

myIntersperse :: Char? -> [Char]
myIntersperse  = 
myIntersperse (x:[]) = x
myIntersperse (x:xs) = x ++ "," ++ (myIntersperse xs)
myIntersperse ["foo","bar","baz","qeqrr"]

7.Treeの高さ

data Tree a = Node a (Tree a) (Tree a)
              | Empty
                deriving (Show)                        
myTreeHeight :: Tree a  -> Integer
myTreeHeight Empty = 0
myTreeHeight (Node a b c) =
                 1 + max (myTreeHeight b) (myTreeHeight c)
test data
x = Node 55 Empty Empty                 
x2 = Node 66 x x
x3 = Node 77 x Empty
x4 = Node 88 Empty x3 
トラックバック - http://specverification.g.hatena.ne.jp/n757uf/20100213