スケッパー好き。形とか
突然の眠気
クロワッサン。 折り込み用のバターは10x10に形を整えた。 焼きは今回は230度5分してホイルを乗せて190度で12分にしてみた。 ホイルを乗せるタイミングを少し遅らせてもいいかも。
参照透過性と副作用と純粋さの話、厳密に定義しようとするとわりと微妙なところ出てくる気がする。 三者ともそれぞれに意味合いが違うってのもある。
乱数の種をOSから取得するのは純粋じゃない
seedから乱数を計算する関数は純粋。
アルゴリズムで焼きなまし法みたいなのなかったかな
foldlという関数を見ると、いろいろと話したくなるのがHaskellerの性なのだけど、まあすごく簡単に言うと、「昔はスペースリークの関係でfoldlではなくfoldl'を使えと言われていたけど、今はfoldlとfoldl'は同じものなのでfoldlを使えばいい」という話で、一周して意味のない話になる。
スリープソート リストを返す版 {-# LANGUAGE BlockArguments #-} import Control.Concurrent import Control.Concurrent.STM import Data.Function sort :: [Int] -> IO [Int] sort ns = do c <- atomically newTChan mapM_ (forkIO . single c) ns threadDelay 1000000 atomically $ fix \go -> do e <- isEmptyTChan c if e then pure [] else (:) <$> readTChan c <*> go single :: TChan Int -> Int -> IO () single c n = threadDelay (n * 1000) >> atomically (writeTChan c n)
sleep sortの単純な実装。結果はstdoutに出してる。 import Control.Concurrent sort :: [Int] -> IO () sort ns = do mapM_ (forkIO.single) ns threadDelay 1000000 single :: Int -> IO () single n = threadDelay (n * 1000) >> print n