04102010 life
U隊長が土曜日に働きにいくようになったので、週末は子供の面倒をみたりとか。
娘がクッキーを焼きたいと言い出したので焼くことにした。オーソドックスにチョコチップ。蕎麦打つよりは楽ですな。

近所のスーパーに行ってキラキラアイテムを追加した。

まぁまぁの出来。
「クッキーじゃなくて肉饅つくろうよ」って言ってみたところ「また今度ね」と軽く流されたが、次回こそは肉饅だな。
04102010 life
U隊長が土曜日に働きにいくようになったので、週末は子供の面倒をみたりとか。
娘がクッキーを焼きたいと言い出したので焼くことにした。オーソドックスにチョコチップ。蕎麦打つよりは楽ですな。

近所のスーパーに行ってキラキラアイテムを追加した。

まぁまぁの出来。
「クッキーじゃなくて肉饅つくろうよ」って言ってみたところ「また今度ね」と軽く流されたが、次回こそは肉饅だな。
03102010 HTML5
5章のほかに7,8,9も興味があったのだけど、7,8,9は内容が薄いというかサンプルがそそられなかった。一応押さえておけば、なんかすごい例が出てきたときにすぐに取り入れられていいのかも。
あと、ありがちなデザイナー向けな本ではなくてプログラマー向けなのでよかったが、そのわりにはプログラマー向けの記述、例えばCommetとWebsocketってどう違うのよ?とかそういうあたりがちょっとしか触れられてなくて、どこがどう違ってどういう利点があるのよとかそういうことが知りたかった。あとWeb Workers 8pageって端折り過ぎじゃね?
ドラッグアンドドロップのサンプルは実際にやってみた。これはいい。

02102010 life
ちょっと極端すぎる持論を展開する場面が多々あるが、自給率の話は読んでいて勉強になった。自給率っていうのは率の話であって、国民が必要とする量を100%に置いているわけではないのね。
読み比べるならここらへんか?
02102010 life
出張ホストの話とか日常を綴ったとかそんな感じかなと思ってたら最後に小飼弾さんが出てきた。それが本を贈るといういい話だった。
僕も娘か息子が読んでくれるといいなあと思っている本が幾つかあるヨ。
数学ガールとかね。
maximumは空リストを取れない
*Main> maximum [1..5]
5
*Main> maximum []
*** Exception: Prelude.maximum: empty list
そこで、ちょっと工夫する
safemaximum :: Ord a => [Maybe a] -> Maybe a
safemaximum = maximum . (Nothing:)
使ってみる
*Main> safemaximum $ map Just [1..5]
Just 5
*Main> safemaximum []
Nothing
Real World Haskell―実戦で学ぶ関数型言語プログラミング02102010 Haskell
練習問題10-4
バランスのとれた木をつくる。
data Tree = Leaf Int | Node Tree Tree deriving Show
balance :: [Int] -> Tree
balance [x] = Leaf x
balance xs = Node (balance ys) (balance zs)
where (ys,zs) = splitlr xs
where splitlr ls = splitAt (length ls `div` 2) ls
いちいちリストの長さを数えるのはあほらしいということで、長さを数えずにリスト分割する別解。
要するにsplitを工夫すればいいのね。
ということでマージソートまわりを漁ってみた。
split :: [a] -> ([a],[a])
split [] = ([],[])
split [x] = ([x],[])
split (x:y:zs) = (x:xs,y:ys)
where
(xs,ys) = split zs
ってのが直感的に分かりやすいかな。
という感じで、静岡Haskell読書会をやっています。
入出力
環境変数をmapM_を使って出力してみた。
import System.Environment
main = do env <- getEnvironment
mapM_ (putStrLn . show) env
Real World Haskell―実戦で学ぶ関数型言語プログラミング30092010 家庭菜園
最近雨ばかりで、今日も雨の予報だったのだけど、朝起きたら降ってなかったのでこのタイミングを逃すまじと。
今時は5時だとまだ暗くて、5時半にならないと日が出てこない。夜は日が落ちちゃうし、畑仕事をする時間がなくて困る。
甘長美人と茄子のレーン。両方共ほとんど終わりかけてる。

ミョウガは、ボコボコ取れて楽しい上に、オクラみたいにすぐ成長するわけでないので、多少放っておいても収穫時期を逃すことがないのが嬉しい。

浅葱も順調に大きくなってきて、収穫タイミングをはかっている。

今日の収穫。ミョウガ、茄子、甘長美人

空いてる区画が結構多くて、雑草も生えてきてるので手入れしつつ葉物でも蒔くといいんだけど、去年撒いたらアブラムシの猛攻にあったので躊躇している。
あと、来年はソラマメとジャガイモ(春)を植えたいんだけど、それらを逆算して葉物をシーケンシャルにつなげられるかとか週末に計画を立てる。
takeWhileの実装
まずは再帰で
mytakeWhile :: (a -> Bool) -> [a] -> [a]
mytakeWhile f [] = []
mytakeWhile f (x:xs) = case f x of
True -> x : mytakeWhile f xs
False -> []
続いてfoldrを使って
mytakeWhile' :: (a -> Bool) -> [a] -> [a]
mytakeWhile' f xs = foldr step [] xs
where step x ys | f x = x : ys
| otherwise = []
-- *Main> mytakeWhile' (<3) [1,2,3,4,5,4,3,2,1]
-- [1,2]
最初書いてたときにコレって
1:2:3:[]:[]:3:2:1:[]
ってなるよなとか思ったんだけどfoldrの定義見て
-- foldr :: (a -> b -> b) -> b -> [a] -> b
-- -- foldr _ z [] = z
-- -- foldr f z (x:xs) = f x (foldr f z xs)
再帰になってるから[]が返った時点で終了すんのねと。
Real World Haskell―実戦で学ぶ関数型言語プログラミング