{"id":68,"date":"2015-12-08T07:02:58","date_gmt":"2015-12-07T22:02:58","guid":{"rendered":"http:\/\/mitsuji.org\/?p=68"},"modified":"2016-01-05T18:57:40","modified_gmt":"2016-01-05T09:57:40","slug":"%e6%97%a9%e6%9c%9f%e3%83%aa%e3%82%bf%e3%83%bc%e3%83%b3-%e7%b6%99%e7%b6%9a","status":"publish","type":"post","link":"https:\/\/mitsuji.org\/?p=68","title":{"rendered":"\u7d99\u7d9a\u30e2\u30ca\u30c9\u306e\u4f7f\u3044\u9053 \u65e9\u671f\u30ea\u30bf\u30fc\u30f3"},"content":{"rendered":"<p>\u5f15\u6570\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u554f\u984c\u304c\u3042\u308c\u3070 Left \u306b\u5305\u3093\u3060\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u3001\u554f\u984c\u304c\u306a\u3051\u308c\u3070 Right \u306b\u5305\u3093\u3060\u8a08\u7b97\u7d50\u679c\u306b\u8a55\u4fa1\u3055\u308c\u308b\u95a2\u6570\u3092\u8003\u3048\u3066\u307f\u3088\u3046\u3002<br \/>\n\u7d14\u7c8b\u306a\u95a2\u6570\u3067\u3082\u30ed\u30b8\u30c3\u30af\u3092\u8868\u73fe\u3059\u308b\u3053\u3068\u306f\u53ef\u80fd\u3060\u304c\u3001if\u6587\u306e\u30cd\u30b9\u30c8\u304c\u6df1\u304f\u306a\u308c\u3070\u306a\u308b\u307b\u3069\u5730\u7344\u3067\u3042\u308b\u3002\u624b\u7d9a\u304d\u578b\u8a00\u8a9e\u3067\u3042\u308c\u3070\u65e9\u671f\u30ea\u30bf\u30fc\u30f3\u3067\u66f8\u304d\u305f\u3044\u3068\u3053\u308d\u3060\u304c\u3001\u95a2\u6570\u578b\u8a00\u8a9e\u3067\u306f\u3069\u3046\u3059\u308b\u306e\u304b\u3002<\/p>\n<pre class=\"lang:haskell\">\ncheckName :: String -> String -> Either String String\ncheckName fstname famname =\n  if ( length fstname == 0 )\n  then Left \"error: fstname is empty\"\n  else\n    if not (isValidFirstName fstname)\n    then Left \"error: fstname is invalid\"\n    else\n      if ( length famname == 0 )\n      then Left \"error: famname is empty\"\n      else\n        if not (isValidFamilyName famname)\n        then Left \"error: famname is invalid\"\n        else Right $ fstname ++ \" \" ++ famname\n  where\n    isValidFirstName ca = (all isLower ca)\n                          && ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n<\/pre>\n<h2>\u65b9\u6cd51. Either\u30e2\u30ca\u30c9\u3092\u4f7f\u3046<\/h2>\n<p>\u203b\u67d0\u6240\u3067\u6307\u6458\u3092\u53d7\u3051\u305f\u306e\u3067\u8ffd\u8a18\u3002<br \/>\nEither \u30e2\u30ca\u30c9\u81ea\u4f53\u306e\u6027\u8cea\u3092\u5229\u7528\u3059\u308c\u3070\u3001\u7121\u5c3d\u8535\u306b\u30cd\u30b9\u30c8\u304c\u6df1\u304f\u306a\u3063\u3066\u3044\u304f\u72b6\u6cc1\u306f\u907f\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002\u5834\u5408\u306b\u3088\u3063\u3066\u306f\u3053\u308c\u3067\u5341\u5206\u3060\u308d\u3046\u3002\u305f\u3060\u3001\u3088\u308a\u65e9\u671f\u30ea\u30bf\u30fc\u30f3\u98a8\u306b\u8868\u73fe\u3057\u305f\u3044\u3068\u304d\u3069\u3046\u3057\u305f\u3089\u3088\u3044\u304b\uff1f<\/p>\n<pre class=\"lang:haskell\">\ncheckNameEM :: String -> String -> Either String String\ncheckNameEM fstname famname = do\n  -- fstname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\n  fstname' <- if ( length fstname == 0 )\n              then Left \"error: fstname is empty\"\n              else\n                if not (isValidFirstName fstname)\n                then Left \"error: fstname is invalid\"\n                else Right fstname\n\n  -- famname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\n  famname' <- if ( length famname == 0 )\n              then Left \"error: famname is empty\"\n              else\n                if not (isValidFamilyName famname)\n                then Left \"error: famname is invalid\"\n                else Right famname\n\n  -- fstname' famname' \u306e\u4e21\u65b9\u304c Right \u306e\u6642\u3060\u3051\u95a2\u6570\u304c\u8a55\u4fa1\u3055\u308c\u308b\n  return $ fstname' ++ famname'\n  where\n    isValidFirstName ca = (all isLower ca)\n                          &#038;&#038; ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n\n<\/pre>\n<p>\u3064\u3044\u3067\u306bApplicative\u30b9\u30bf\u30a4\u30eb\u3067\u306e\u8a18\u8ff0\u3082\u8f09\u305b\u3066\u304a\u304f\u3002<\/p>\n<pre class=\"lang:haskell\">\ncheckNameEA :: String -> String -> Either String String\ncheckNameEA fstname famname = do\n  -- fstname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\u3057\u305f\u7d50\u679c\u3092Either(Left or Right)\u3067\u5305\u3080\n  let fstname' = if ( length fstname == 0 )\n                 then Left \"error: fstname is empty\"\n                 else\n                   if not (isValidFirstName fstname)\n                   then Left \"error: fstname is invalid\"\n                   else Right fstname\n\n  -- famname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\u3057\u305f\u7d50\u679c\u3092Either(Left or Right)\u3067\u5305\u3080\n  let famname' = if ( length famname == 0 )\n                 then Left \"error: famname is empty\"\n                 else\n                   if not (isValidFamilyName famname)\n                   then Left \"error: famname is invalid\"\n                   else Right famname\n\n  -- Applicative\u30b9\u30bf\u30a4\u30eb\n  -- fstname' famname' \u306e\u4e21\u65b9\u304c Right \u306e\u6642\u3060\u3051\u95a2\u6570\u304c\u8a55\u4fa1\u3055\u308c\u308b\n  (\\fst fam -> fst ++ \" \" ++ fam) <$> fstname' <*> famname'\n  where\n    isValidFirstName ca = (all isLower ca)\n                          && ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n\n<\/pre>\n<h2>\u65b9\u6cd52. \u7d99\u7d9a\u30e2\u30ca\u30c9\u3092\u4f7f\u3046<\/h2>\n<p>\u305d\u3053\u3067\u7d99\u7d9a\u30e2\u30ca\u30c9\u767b\u5834\u3002\u7d14\u7c8b\u95a2\u6570\u5185\u3067\u3001\u65e9\u671f\u30ea\u30bf\u30fc\u30f3\u306e\u3088\u3046\u306a\u8a18\u8ff0\u304c\u53ef\u80fd\u3068\u306a\u308b\u3002<\/p>\n<pre class=\"lang:haskell\">\ncheckNameC :: String -> String -> Either String String\ncheckNameC fstname famname = (`runCont` id) $ callCC $ \\exit -> do\n  when ( length fstname == 0 )\n    $ exit $ Left \"error: fstname is empty\"\n\n  when ( not (isValidFirstName fstname))\n    $ exit $ Left \"error: fstname is invalid\"\n\n  when ( length famname == 0 )\n    $ exit $ Left \"error: famname is empty\"\n\n  when ( not (isValidFamilyName famname))\n    $ exit $ Left \"error: famname is invalid\"\n\n  return $ Right $ fstname ++ \" \" ++ famname\n  where\n    isValidFirstName ca = (all isLower ca)\n                          && ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n\n<\/pre>\n<p>\u5168\u90e8\u306e\u305b\u3066\u304a\u304f\u3002<\/p>\n<pre class=\"lang:haskell\">\nimport Data.Char(isLower,isUpper)\nimport Control.Monad.Cont\n\n\ncheckName :: String -> String -> Either String String\ncheckName fstname famname =\n  if ( length fstname == 0 )\n  then Left \"error: fstname is empty\"\n  else\n    if not (isValidFirstName fstname)\n    then Left \"error: fstname is invalid\"\n    else\n      if ( length famname == 0 )\n      then Left \"error: famname is empty\"\n      else\n        if not (isValidFamilyName famname)\n        then Left \"error: famname is invalid\"\n        else Right $ fstname ++ \" \" ++ famname\n  where\n    isValidFirstName ca = (all isLower ca)\n                          && ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n\n\n\ncheckNameEM :: String -> String -> Either String String\ncheckNameEM fstname famname = do\n  -- fstname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\n  fstname' <- if ( length fstname == 0 )\n              then Left \"error: fstname is empty\"\n              else\n                if not (isValidFirstName fstname)\n                then Left \"error: fstname is invalid\"\n                else Right fstname\n\n  -- famname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\n  famname' <- if ( length famname == 0 )\n              then Left \"error: famname is empty\"\n              else\n                if not (isValidFamilyName famname)\n                then Left \"error: famname is invalid\"\n                else Right famname\n\n  -- fstname' famname' \u306e\u4e21\u65b9\u304c Right \u306e\u6642\u3060\u3051\u95a2\u6570\u304c\u8a55\u4fa1\u3055\u308c\u308b\n  return $ fstname' ++ famname'\n  where\n    isValidFirstName ca = (all isLower ca)\n                          &#038;&#038; ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n\n\n\ncheckNameEA :: String -> String -> Either String String\ncheckNameEA fstname famname = do\n  -- fstname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\u3057\u305f\u7d50\u679c\u3092Either(Left or Right)\u3067\u5305\u3080\n  let fstname' = if ( length fstname == 0 )\n                 then Left \"error: fstname is empty\"\n                 else\n                   if not (isValidFirstName fstname)\n                   then Left \"error: fstname is invalid\"\n                   else Right fstname\n\n  -- famname \u5358\u4f53\u3067\u30c1\u30a7\u30c3\u30af\u3057\u305f\u7d50\u679c\u3092Either(Left or Right)\u3067\u5305\u3080\n  let famname' = if ( length famname == 0 )\n                 then Left \"error: famname is empty\"\n                 else\n                   if not (isValidFamilyName famname)\n                   then Left \"error: famname is invalid\"\n                   else Right famname\n\n  -- Applicative\u30b9\u30bf\u30a4\u30eb\n  -- fstname' famname' \u306e\u4e21\u65b9\u304c Right \u306e\u6642\u3060\u3051\u95a2\u6570\u304c\u8a55\u4fa1\u3055\u308c\u308b\n  (\\fst fam -> fst ++ \" \" ++ fam) <$> fstname' <*> famname'\n  where\n    isValidFirstName ca = (all isLower ca)\n                          && ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n\n\n\ncheckNameC :: String -> String -> Either String String\ncheckNameC fstname famname = (`runCont` id) $ callCC $ \\exit -> do\n  when ( length fstname == 0 )\n    $ exit $ Left \"error: fstname is empty\"\n\n  when ( not (isValidFirstName fstname))\n    $ exit $ Left \"error: fstname is invalid\"\n\n  when ( length famname == 0 )\n    $ exit $ Left \"error: famname is empty\"\n\n  when ( not (isValidFamilyName famname))\n    $ exit $ Left \"error: famname is invalid\"\n\n  return $ Right $ fstname ++ \" \" ++ famname\n  where\n    isValidFirstName ca = (all isLower ca)\n                          && ( 4 <= length ca &#038;&#038; length ca <= 10)\n    isValidFamilyName ca = (all isUpper ca)\n                           &#038;&#038; ( 2 <= length ca &#038;&#038; length ca <= 8)\n \n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5f15\u6570\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u3001\u554f\u984c\u304c\u3042\u308c\u3070 Left \u306b\u5305\u3093\u3060\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u3001\u554f\u984c\u304c\u306a\u3051\u308c\u3070 Right \u306b\u5305\u3093\u3060\u8a08\u7b97\u7d50\u679c\u306b\u8a55\u4fa1\u3055\u308c\u308b\u95a2\u6570\u3092\u8003\u3048\u3066\u307f\u3088\u3046\u3002 \u7d14\u7c8b\u306a\u95a2\u6570\u3067\u3082\u30ed\u30b8\u30c3\u30af\u3092\u8868\u73fe\u3059\u308b\u3053\u3068\u306f\u53ef\u80fd\u3060\u304c\u3001if\u6587\u306e\u30cd\u30b9\u30c8\u304c\u6df1\u304f\u306a &hellip; <a href=\"https:\/\/mitsuji.org\/?p=68\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">\u7d99\u7d9a\u30e2\u30ca\u30c9\u306e\u4f7f\u3044\u9053 \u65e9\u671f\u30ea\u30bf\u30fc\u30f3<\/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\/68"}],"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=68"}],"version-history":[{"count":15,"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":137,"href":"https:\/\/mitsuji.org\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions\/137"}],"wp:attachment":[{"href":"https:\/\/mitsuji.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mitsuji.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mitsuji.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}