Hatena::¥Ö¥í¥°(Diary)

½ã¿è´Ø¿ô·¿»¨µ­Ä¢ ¤³¤Î¥Ú¡¼¥¸¤ò¥¢¥ó¥Æ¥Ê¤ËÄɲà RSS¥Õ¥£¡¼¥É Twitter

¤³¤Î¥Ú¡¼¥¸¤ÏHaskell¤ò°¦¤Ç¤ë¥Ú¡¼¥¸¤Ç¤¹¡£
Æü´©·Á¼°¤ÇHaskell¤Ê¤É¤Ë¤Ä¤¤¤Æ¤Îµ­»ö¤ò¤À¤é¤À¤é¤È·ÇºÜ¤·¤È¤ê¤Þ¤¹¡£
2004 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 06 | 07 | 08 | 09 | 11 |
2007 | 03 | 04 | 05 | 07 | 08 | 09 | 12 |
2008 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 03 | 05 | 06 | 09 | 10 | 11 | 12 |
2010 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2011 | 01 | 02 | 05 |
ËÜÂÎ¥µ¥¤¥È

2004ǯ08·î03Æü(²Ð) ĶÁ°±ÒŪ¥²¡¼¥à¥×¥í¥°¥é¥ß¥ó¥°ÊýË¡ÏÀ­¶

ºÇ¶á»þ´Ö¤¬Ìµ¤¯¤ÆÊ¸¾Ï¤ò½½Ê¬¤Ë¿äÚʤǤ­¤Ê¤¤¡Ä

¢£[][]¤½¤Î1³¤­ ¤½¤Î1³¤­¤ò´Þ¤à¥Ö¥Ã¥¯¥Þ¡¼¥¯ ¤½¤Î1³¤­¤Î¥Ö¥Ã¥¯¥Þ¡¼¥¯¥³¥á¥ó¥È

ºòÆü¤Î³¤­¡£

·Ñ³¤òÍѤ¤¤ÆÊÂÎóŪ¤Ê½èÍý¤Îµ­½Ò¤ò¹Ô¤¦¤È¤¤¤¦¤³¤È¤Ç¤¢¤Ã¤¿¡£

º£²ó¤Ï¤½¤Î¶ñÂÎŪÊýË¡¤Ë¤Ä¤¤¤Æ½Ò¤Ù¤ë¡£


¤³¤ÎÊýË¡¤Î´ðËÜŪ¤Ê¥¢¥¤¥Ç¥¢¤ÏHaskell¤ÎPrelude¤Ë¤¢¤ëinteract¤Ç¤¢¤ë¡£

¤³¤Î¥Ú¡¼¥¸¤Ç¤â¤¿¤Ó¤¿¤Ó¼è¤ê¾å¤²¤Æ¤¤¤ë¤Î¤Ç¾Ü¤·¤¯¤Ï¤½¤Á¤é¤ò¸«¤Æ¤â¤é¤¦¤È¤·¤Æ¡¢

¤ï¤«¤ëÊý¤Ï¤â¤¦¤³¤ì¤À¤±¤Ç¤ï¤«¤Ã¤Æ¤·¤Þ¤¦¤Î¤Ç¤Ï̵¤¤¤«¤È»×¤¦¡£

interact¤ÇÃٱ䤹¤ëÆþÎϤËÂФ·¤Æ½ÐÎϤòÄêµÁ¤¹¤ë¤È¡¢

¤½¤Î½ÐÎϤâÃٱ䤹¤ë¤Î¤Ç¤½¤ì¤òÍѤ¤¤Æ¥¤¥ó¥¿¥é¥¯¥Æ¥£¥Ö¤Ê

¥×¥í¥°¥é¥à¤¬ºî¤ì¤ë¤Î¤Ç¤¢¤ë¤¬¡¢¤½¤ì¤ÈƱ¤¸¤Ç¥²¡¼¥à¤Ç¤â

Ãٱ䤹¤ëÆþÎϤËÂФ·¤Æ¤½¤Î¥ê¥¢¥¯¥·¥ç¥ó¤¬ÄêµÁ¤Ç¤­¤ì¤Ð

½ÐÎϤâÃٱ䥹¥È¥ê¡¼¥à¤Ë¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¤Î¤Ç¤¢¤ë¡£

(¤³¤Î¥Ú¡¼¥¸¤ÎºÇ½é¤Î¤³¤í¤Ë½ñ¤¤¤¿¿ôÅö¤Æ¥²¡¼¥à¤ò¸«¤Æ¤â¤é¤¨¤ë¤È¡£)


interact¤Ë¤ÆÃٱ䤹¤ëÆþÎϤÏɸ½àÆþÎϤ«¤é¤ÎÆþÎÏʸ»úÎó¤Ç¤¢¤ë¡£

¥ê¥¢¥ë¥¿¥¤¥àÆþÎϤˤÆÉ¬Íפˤʤë¤Î¤Ï³Æ¥Õ¥ì¡¼¥à¤Î¥­¡¼¾õÂ֤ˤʤë¤Î¤Ç¡¢

ÆþÎϤȤ·¤Æ¥­¡¼¾õÂ֤Υꥹ¥È¤ò°ú¤ÃÄ¥¤Ã¤Æ¤³¤ì¤Ð¤è¤¤¡£

¥¤¥á¡¼¥¸¤È¤·¤Æ¤Ï¡¢Éô֤¿¤È¤¨¤Ð60²ó¤Î³ä¹ç¤Ç¤Ô¤ç¤³¤Ô¤ç¤³¿­¤Ó¤ë¥ê¥¹¥È¤¬

ÆþÎϤǤ¢¤ë¤è¤¦¤Ê´¶¤¸¤Ç¤¢¤í¤¦¤«¡£¡£


¤È¤ê¤¢¤¨¤º¡¢interact¡Ä¤È¤¤¤¦¤«getContents¤ÎSDLÈǤȤǤâ¸À¤¦¤â¤Î

¤ò¼ÂÁõ¤·¤Æ¤ß¤ë¡£

getKeys :: IO [ [SDLKey] ]
getKeys = do
  pumpEvents
  ks  <- getKeyState
  delay 100 -- µÙ¤ß»þ´Ö¤ÏŬÅö
  kss <- getKeys
  return $ ks:kss

¥á¥Ã¥»¡¼¥¸¤ò¥Ý¥ó¥×¤·¤Æ¡¢¥­¡¼¾õÂÖ¼èÆÀ¤·¤Æ¡¢¾¯¤·µÙ¤ó¤Ç

ºÆµ¢¤¹¤ë¤è¤¦¤Ê´¶¤¸¤Ç¤¢¤ë¡£

¤¿¤À¤·¡¢¤³¤ì¤Ï¤³¤Î¤Þ¤Þ¤Ç¤Ï¤¦¤Þ¤¯¹Ô¤«¤Ê¤¤¡£

Á°¤ËÃÙ±äIO¤Ç½ñ¤¤¤¿¤¬(¤³¤ó¤Ê¤Î¤Ð¤Ã¤«¤ê¤ä¤Ê¡Ä)¡¢

¤³¤ì¤Ç¤ÏÃٱ䤷¤Æ¤¯¤ì¤Ê¤¤¤Î¤Ç¤¢¤ë¡£

¤½¤³¤Ç¡¢¤³¤ì¤ÎÄêµÁ¤Ï(¸Õ»¶½­¤¤¤â¤Î¤òÍѤ¤)¼¡¤Î¤è¤¦¤Ë¤¹¤ëɬÍפ¬¤¢¤ë¡£

getKeys = unsafeInterleaveIO $ do
  pumpEvents
  ks  <- getKeyState
  delay 100
  kss <- getKeys
  return $ ks:kss

¤³¤ì¤Ç¡¢Ãٱ䤹¤ë¥­¡¼¾õÂ֥ꥹ¥È¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£

¤¢¤È¤Ï¡¢[ [SDLKey] ] -> [¤Ê¤Ë¤«]¤Ê´Ø¿ô¤òÄêµÁ¤¹¤ì¤Ð˾¤ß¤Î½èÍý¤ò½ñ¤¯¤³¤È¤¬½ÐÍè¤ë¤Î¤Ç¤¢¤ë¤¬¡¢

[SDLKey]¤ò¤½¤Î¤Þ¤Þ»È¤¦¤Î¤Ï¤Á¤ç¤Ã¤ÈÌÌÅݤʤΤǡ¢

data KeyState =
  Pushed | Pushing | Released | Releasing
  deriving (Eq,Show)

mkKeyProc (bef,cur) k
  | not bp && not cp = Releasing
  | not bp &&     cp = Pushed
  |     bp && not cp = Released
  |     bp &&     cp = Pushing
  where
    bp = k `elem` bef
    cp = k `elem` cur

¤³¤Î¤è¤¦¤Ê¤â¤Î¤ò¤Ä¤¯¤ê¡¢

main = do
  ...
  getKeys >>= process
  ...

process dat = processReaction $ game funcs where
  funcs = map mkKeyProc $ zip ([]:dat) dat

processReaction :: [¤Ê¤Ë¤«] -> IO ()
 ...

game :: [SDLKey -> KeyState] -> [¤Ê¤Ë¤«]
 ...

¤³¤Î¤è¤¦¤Ë¤¹¤ì¤Ð²¡¤·¤¿½Ö´Ö¤Ê¤É¤â¤ï¤«¤ê´öʬ¤ï¤«¤ê¤ä¤¹¤¤¡£

game¤¬¥²¡¼¥à¤ÎÄêµÁ¤È¤Ê¤ë¤¬¡¢¤É¤Î¤è¤¦¤Ê´¶¤¸¤Ë¤Ê¤ë¤Î¤«Å¬Åö¤Ëºî¤Ã¤Æ¤ß¤¿¡£

game = entryPoint

entryPoint (s:ss)
  | s SDLK_z == Pushed = nextPoint ss
  | otherwise = "I am in the entry point.":entryPoint ss

nextPoint (s:ss)
  | s SDLK_x == Pushed = entryPoint ss
  | s SDLK_a == Pushed = ["The end."]
  | otherwise = "Here is next point":nextPoint ss

Á´¤¯¥²¡¼¥à¤Ç¤Ï¤Ê¤¤¤¬¡Ä

¾å¥³¡¼¥É¤Ë¤Æ[¤Ê¤Ë¤«]¤Ï[String]¤È¤·¤Æ¤¤¤ë¤¬¡¢

(processReaction = mapM_ putStrLn ¤È¤Ç¤â¤·¤Æ¤ª¤¯)

Ê̤˲¿¤Ç¤â¤¤¤¤¤Î¤Ç¡¢[IO()]¤È¤«¤È¤¹¤ì¤Ð²¿¤Ç¤â½ÐÍè¤ë¤Ç¤¢¤í¤¦¡£

(ÆþÎϤϾå¤Î¤Þ¤Þ¤Ç¤Ï½ÐÍè¤Ê¤¤¤Î¤Ç¡¢Â¾¤Ë¹Í¤¨¤ëɬÍפ¬¤¢¤ë¤±¤É)

ºÇ½éentryPoint¤Ë¤¤¤Æ¡¢z¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤ë¤ÈnextPoint¤Ë°Ü¹Ô¡¢

nextPointÃæ¤Ë¤Æx¤¬²¡¤µ¤ì¤ë¤ÈentryPoint¤Ë°Ü¹Ô¡¢

a¤¬²¡¤µ¤ì¤ë¤È¥ê¥¹¥È¤¬½ª¤ï¤ë¡£

(¤³¤³¤Ç¥ê¥¹¥È¤ò½ª¤ï¤é¤»¤ë=¥×¥í¥°¥é¥à¤¬½ª¤ï¤ë¤È¤Ê¤ë¤³¤È¤¬

¸Ä¿ÍŪ¤Ë¤Á¤ç¤Ã¤ÈÌÌÇò¤«¤Ã¤¿)

¾å¥³¡¼¥É¤Ï¥×¥í¥°¥é¥à¤ÎÊÂÎóÀ­¤Ë¤Ä¤¤¤Æ¤Ï²¿¤âµ­½Ò¤·¤Æ¤¤¤Ê¤¤¤¬

(Á°²ó¤Îyield()¤ËÁêÅö¤¹¤ë¤â¤Î¤È¤«)

ÃÙ±äɾ²Á¤µ¤ì¤ë¤Î¤Ç¡¢°ì¥Õ¥ì¡¼¥à¤´¤È¤ËɬÍפʷ׻»¤Î¤ß¤¬¤Ê¤µ¤ì¤Æ¡¢

¼ÂºÝ¤Ë¤ÏËè¥Õ¥ì¡¼¥à¼Â¹Ô¤¬ÃæÃǤµ¤ì¤ë¤è¤¦¤Ë¿¶Éñ¤¦¤Î¤Ç¤¢¤ë¡£


¤â¤Á¤í¤ó¡¢¤³¤ì¤ò¤³¤Î¤Þ¤Þ°ìÈÌŪ¤Ê¥²¡¼¥à¤Î¼ÂÁõ¤È¤·¤Æ»È¤¦¤Î¤Ï

¤Þ¤À¤ä¤ê¤Ë¤¯¤¤¤È»×¤¦¤Î¤Ç¡¢¤½¤Î½õ¤±¤Ë¤Ê¤ë¤è¤¦¤ÊÉÁ²è¥·¥¹¥Æ¥à¤ò

¹Í¤¨¤ë¤³¤È¤Ë¤¹¤ë¡£

(³¤¯¡Ä)