{"id":73,"date":"2015-12-09T18:22:17","date_gmt":"2015-12-09T09:22:17","guid":{"rendered":"http:\/\/mitsuji.org\/?p=73"},"modified":"2016-01-05T18:57:30","modified_gmt":"2016-01-05T09:57:30","slug":"73","status":"publish","type":"post","link":"https:\/\/mitsuji.org\/?p=73","title":{"rendered":"Writer\u30e2\u30ca\u30c9\u306e\u4f7f\u3044\u9053 \u8a08\u7b97\u306e\u7d4c\u904e\u3092\u5f97\u308b"},"content":{"rendered":"<p>1\u304b\u308910\u307e\u3067\u8db3\u3057\u7b97\u3059\u308b\u30b3\u30fc\u30c9\u3092\u8003\u3048\u3066\u307f\u3088\u3046\u3002\u95a2\u6570\u578b\u8a00\u8a9e\u3067\u306f\u9ad8\u968e\u95a2\u6570\u3092\u4f7f\u3063\u3066\u3059\u3063\u304d\u308a\u8868\u73fe\u3067\u304d\u308b\u3002<br \/>\n\u305f\u3060\u3001\u3053\u306e\u30b3\u30fc\u30c9\u306b\u306f\u6b20\u70b9\u304c\u3042\u308b\u3002\u6700\u5f8c\u306e\u7d50\u679c\u6c42\u3081\u308b\u306b\u306f\u5341\u5206\u3060\u304c\u3001\u8db3\u3057\u7b97\u306e\u7d4c\u904e\u3092\u898b\u305f\u3044\u3068\u304d\u3069\u3046\u3057\u3066\u3088\u3044\u304b\u5206\u304b\u3089\u306a\u3044\u3002<\/p>\n<pre class=\"lang:haskell\">\nimport Data.List(foldl')\n\nmain = do\n  print $ sum' [1..10]\n\nsum' :: Num a => [a] -> a\nsum' xs = foldl' (+) 0 xs\n\n<\/pre>\n<p>\u624b\u7d9a\u304d\u578b\u8a00\u8a9e\u3067\u66f8\u304b\u308c\u305f\u30b3\u30fc\u30c9\u3060\u3063\u305f\u3089\u3001\u4e00\u884c\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u826f\u3044\u304b\u3082\u3057\u308c\u306a\u3044\u3002<br \/>\n\u3067\u306f\u95a2\u6570\u578b\u8a00\u8a9e\u3067\u306f\u3069\u3046\u3059\u308b\u306e\u304b?<\/p>\n<pre class=\"lang:javascript\">\nfunction sum2 (xs) {\n    var r = 0;\n    for(var i in xs)\n    {\n    r += xs[i];\n    console.log(\"r: \" + r) \/\/ \u3053\u306e\u884c\u3092\u8ffd\u52a0\u3059\u308c\u3070OK\n    }\n    return r;\n}\n<\/pre>\n<h2>\u65b9\u6cd51. IO\u30e2\u30ca\u30c9\u3092\u4f7f\u3046<\/h2>\n<p>(+) \u306e IO\u30e2\u30ca\u30c9\u5bfe\u5fdc\u7248\uff08addIO\uff09\u3092\u4f5c\u308a\u3001foldl \u3092 foldM \u306b\u5909\u3048\u308c\u3070\u3001addIO\u5185\u3067putStrLn\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308b\u3002\u305f\u3060\u3001\u3053\u308c\u3060\u3068\u7d14\u7c8b\u306a\u95a2\u6570\u3067\u306f\u306a\u304f\u306a\u308a\u3001IO\u3092\u5f15\u304d\u305a\u3063\u3066\u3044\u308b\u7b87\u6240\u3067\u3057\u304b\u5229\u7528\u3067\u304d\u306a\u3044\u3002<\/p>\n<pre class=\"lang:haskell\">\nmain = do\n  print =<< sumIO [1..10]\n\nsumIO :: (Num a, Show a) => [a] -> IO a\nsumIO xs = foldM addIO 0 xs\n\naddIO :: (Num a, Show a) =>  a -> a -> IO a\naddIO p1 p2 = putStrLn (\"r: \" ++ show r) >> return r\n  where\n    r = p1 + p2\n\n<\/pre>\n<h2>\u65b9\u6cd52. trace \u3092\u4f7f\u3046<\/h2>\n<p>Haskell \u306b\u306f\u7d14\u7c8b\u306a\u95a2\u6570\u5185\u3067\u306e\u8a08\u7b97\u3092\u30c7\u30d0\u30c3\u30b0\u51fa\u529b\u3059\u308b\u95a2\u6570\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u3002trace \u306f \u7b2c\u4e00\u5f15\u6570\u3092\u6a19\u6e96\u51fa\u529b\u306b\u8868\u793a\u3057\u3001\u7b2c\u4e8c\u5f15\u6570\u3068\u540c\u3058\u3082\u306e\u306b\u8a55\u4fa1\u3055\u308c\u308b\u95a2\u6570\u3060\u3002\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3053\u308c\u3067\u5341\u5206\u3060\u308d\u3046\u3002\u305f\u3060\u3001\u7d4c\u904e\u306e\u5024\u3092\u4ed6\u306e\u8a08\u7b97\u3067\u3082\u5229\u7528\u3057\u305f\u3044\u3068\u304d\u3001\u6a19\u6e96\u51fa\u529b\u306b\u8868\u793a\u3055\u308c\u3066\u3057\u307e\u3063\u305f\u3082\u306e\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u306a\u3044\u3002<\/p>\n<pre class=\"lang:haskell\">\nimport Data.List(foldl')\nimport Debug.Trace\n\nmain = do\n  print $ sumT [1..10]\n  \nsumT :: (Num a, Show a) => [a] -> a\nsumT xs = foldl' addT 0 xs\n\naddT :: (Num a, Show a) => a -> a -> a\naddT p1 p2 = trace (\"r: \" ++ show r) r\n  where\n    r = p1 + p2\n  \n<\/pre>\n<h2>\u65b9\u6cd53. Writer\u30e2\u30ca\u30c9 \u3092\u4f7f\u3046<\/h2>\n<p>\u305d\u3053\u3067Writer\u30e2\u30ca\u30c9\u767b\u5834\u3002Writer\u30e2\u30ca\u30c9\u306fIO\u30e2\u30ca\u30c9\u3068\u9055\u3044\u7d14\u7c8b\u95a2\u6570\u5185\u3067\u5b9f\u884c\u3067\u304d\u3001\u30b3\u30fc\u30c9\u306b\u4e0b\u8a18\u306e\u3088\u3046\u306b\u624b\u3092\u52a0\u3048\u308b\u3053\u3068\u3067\u3001\u7d50\u679c\u306b\u3044\u305f\u308b\u307e\u3067\u306e\u904e\u7a0b\u306e\u5024\u3092\u6700\u5f8c\u306b\u30ea\u30b9\u30c8\u3068\u3057\u3066\u5f97\u308b\u3053\u3068\u304c\u51fa\u6765\u308b\u3002<\/p>\n<pre class=\"lang:haskell\">\nimport Control.Monad.Writer\n\nmain = do\n  print $ sumW [1..10]\n\nsumW :: (Num a) => [a] -> (a,[a])\nsumW xs = runWriter $ foldM addW 0 xs\n          \n-- \u623b\u308a\u5024\u306e\u578b\u306b\u7d30\u5de5\u3092\u3059\u308b\u3068Writer\u30e2\u30ca\u30c9\u5bfe\u5fdc\u306e\u95a2\u6570\u306b\u306a\u308b\naddW :: (Num a) => a -> a -> Writer [a] a\n-- tell \u3067\u7d4c\u904e\u3092\u4fdd\u5b58\u3001return\u3067\u6b21\u306e\u8a08\u7b97\u306b\u7d50\u679c\u3092\u6e21\u3059\naddW p1 p2 = tell [r] >> return r\n  where\n    r = p1 + p2\n\n<\/pre>\n<p>\u5168\u90e8\u306e\u305b\u3066\u304a\u304f\u3002<\/p>\n<pre class=\"lang:haskell\">\nimport Data.List(foldl')\nimport Debug.Trace\nimport Control.Monad.Writer\n\nmain = do\n  print $ sum' [1..10]\n  print $ sumW [1..10]\n  print $ sumT [1..10]\n  print =<< sumIO [1..10]\n\n\nsum' :: Num a => [a] -> a\nsum' xs = foldl' (+) 0 xs\n\n\n\nsumIO :: (Num a, Show a) => [a] -> IO a\nsumIO xs = foldM addIO 0 xs\n\naddIO :: (Num a, Show a) =>  a -> a -> IO a\naddIO p1 p2 = putStrLn (\"r: \" ++ show r) >> return r\n  where\n    r = p1 + p2\n\n\n\nsumT :: (Num a, Show a) => [a] -> a\nsumT xs = foldl' addT 0 xs\n\naddT :: (Num a, Show a) => a -> a -> a\naddT p1 p2 = trace (\"r: \" ++ show r) r\n  where\n    r = p1 + p2\n  \n\n\nsumW :: (Num a) => [a] -> (a,[a])\nsumW xs = runWriter $ foldM addW 0 xs\n          \naddW :: (Num a) => a -> a -> Writer [a] a\naddW p1 p2 = tell [r] >> return r\n  where\n    r = p1 + p2\n\n<\/pre>\n<pre class=\"lang:javascript\">\nwindow.onload = function() {\n    console.log(sum1([1,2,3,4,5,6,7,8,9,10]));\n    console.log(sum2([1,2,3,4,5,6,7,8,9,10]));\n}\n\nfunction sum1 (xs) {\n    var r = 0;\n    for(var i in xs)\n    {\n    r += xs[i];\n    }\n    return r;\n}\n\nfunction sum2 (xs) {\n    var r = 0;\n    for(var i in xs)\n    {\n    r += xs[i];\n    console.log(\"r: \" + r)\n    }\n    return r;\n}\n\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>1\u304b\u308910\u307e\u3067\u8db3\u3057\u7b97\u3059\u308b\u30b3\u30fc\u30c9\u3092\u8003\u3048\u3066\u307f\u3088\u3046\u3002\u95a2\u6570\u578b\u8a00\u8a9e\u3067\u306f\u9ad8\u968e\u95a2\u6570\u3092\u4f7f\u3063\u3066\u3059\u3063\u304d\u308a\u8868\u73fe\u3067\u304d\u308b\u3002 \u305f\u3060\u3001\u3053\u306e\u30b3\u30fc\u30c9\u306b\u306f\u6b20\u70b9\u304c\u3042\u308b\u3002\u6700\u5f8c\u306e\u7d50\u679c\u6c42\u3081\u308b\u306b\u306f\u5341\u5206\u3060\u304c\u3001\u8db3\u3057\u7b97\u306e\u7d4c\u904e\u3092\u898b\u305f\u3044\u3068\u304d\u3069\u3046\u3057\u3066\u3088\u3044\u304b\u5206\u304b\u3089\u306a\u3044\u3002 impo &hellip; <a href=\"https:\/\/mitsuji.org\/?p=73\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">Writer\u30e2\u30ca\u30c9\u306e\u4f7f\u3044\u9053 \u8a08\u7b97\u306e\u7d4c\u904e\u3092\u5f97\u308b<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[3,5],"_links":{"self":[{"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/posts\/73"}],"collection":[{"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mitsuji.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=73"}],"version-history":[{"count":30,"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":91,"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/posts\/73\/revisions\/91"}],"wp:attachment":[{"href":"https:\/\/mitsuji.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mitsuji.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mitsuji.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}