æž
ç®
æ±ãšè¥¿ã«äŒžã³ããããããŒã¯ããã森ã®å°éã«ããå°ããªç©ºãå°ã«ããŸãã
å
容ïŒ
ãããã€ããŒã1-å
ããŒã2-ãã©ã¬ã¹ãããŒã3-ããªã¢ãããŒã4-ãã£ããªã³ã®ãã¥ãŒããŒã5-ããŒã«ããŒã3
ããã§ã¯ãADTã§ããžãã¯ãåŠã³ãShow and Readããžãã¯ã³ã³ããŒã¿ãŒã«ã€ããŠåŠã³ãŸãã
æåŸã®éšåã§ã¯ãdescribeLocationã®ããŸããŸãªãªãã·ã§ã³ãèæ¡ããæåŸã«3ã€ã®ä»£æ°å-LocationãDirectionãActionãäœæããŸããã ç§ã¯ATDã®éæ³ãšé©ãã¹ãæ©èœã«ã€ããŠèšåããŸãããããããã«ã€ããŠã¯åŸã§æ€èšãããšèšããŸããã Eq
åã¯ã©ã¹ããåãç¶æ¿ããŸããããã®ã¯ã©ã¹ã«ã¯ãæäœ "=="ããã³ "/ ="ãå«ãŸããŠããŸãã
å¥è·¡ã欲ããã§ããïŒ ããŠ... Locationã¿ã€ããããäžåºŠèŠãŠã¿ãŸãããã
ããŒã¿ã®å Žæ=
ããŒã
| åéã®åº
| åº
| OtherRoom- æ°ããã³ã³ã¹ãã©ã¯ã¿ãŒãè¿œå ãããŸããã
å°åº ïŒ Eq ïŒ
*ã¡ã€ã³>ããŒã / = Friend'sYard
æ¬åœ
*ã¡ã€ã³>ããŒã == OtherRoom
åœ
ãããïŒ æåã®éšåã§ã¯ãäœããæååã«å€æããshowé¢æ°ãããããšãåŠã³ãŸããã è©ŠããŠã¿ãŸãããïŒ
*ã¡ã€ã³>ã·ã§ãŒããŒã
<ã€ã³ã¿ã©ã¯ãã£ã> ïŒ 1 ïŒ 1 ïŒ
ïŒ ã€ã³ã¹ã¿ã³ã¹ã® 衚瀺 ïŒã® ã€ã³ã¹ã¿ã³ã¹ã¯ãããŸãã
ã show ãã®äœ¿çšããçãã
èããããä¿®æ£ïŒ ïŒ Show Location ïŒã® ã€ã³ã¹ã¿ã³ã¹å®£èšãè¿œå ããŸã
åŒã§ïŒ show Home
ãitãã®æ¹çšåŒïŒit = show Home
ããŸããããŸããã§ãã... 2çªç®ã®ããŒãã®çµããã«ãã§ã«åæ§ã®ãšã©ãŒãçºçããŸããã ããã§ã2ã€ã®ã³ã³ã¹ãã©ã¯ã¿ãæ¯èŒããããšããŸããããghciã¯ããããæ¯èŒããæ¹æ³ãç¥ããªãã£ããããäœãã§ããŸããã§ããã Locationã¿ã€ãã®æåŸã«æŽŸçïŒEqïŒã¹ãã«ãè¿œå ããããšã§åé¡ã解決ãããfactoryãæ¯èŒé¢æ°ã==ããååŸããŸããã showé¢æ°ãååŸããããã«ãã®ãããªããšã¯ã§ããŸããïŒ ã§ããïŒ Show
åã¯ã©ã¹ãç¶æ¿ããã ãã§ååã§ãïŒ
ããŒã¿ã®å Žæ=
ããŒã
| åéã®åº
| åº
| ãã®ä»ã®éšå±
å°åº ïŒ Eq ã Show ïŒ
*ã¡ã€ã³> ïŒr
[ 1 of 1 ] Mainã®ã³ã³ãã€ã«ïŒ HïŒ\ Haskell \ QuestTutorial \ Quest \ QuestMainãHs ã解éæžã¿ïŒ
OK ãããŒããããã¢ãžã¥ãŒã«ïŒMain
*ã¡ã€ã³> ã·ã§ãŒããŒã
ãããŒã ã
*ã¡ã€ã³> "çŸåšã®å ŽæåïŒ" ++ show Home ++ "ã"
ãçŸåšã®å ŽæåïŒããŒã ãã
*ã¡ã€ã³> Friend'sYardã衚瀺
ãFriend'sYardã
ããã¯ã©ã®ããã«äœ¿çšã§ããŸããïŒ ããããããããªæ¹æ³ã§ã ããã§describeLocationé¢æ°ãæ¹åããŸãããã æåŸã®éžæè¢ïŒã
ããä»¥å€ ãïŒãæžãæã
ãŸã ïŒ
describeLocation ::å Žæ-> æåå
describeLocation loc = ã±ãŒã¹ loc
ããŒã -> ãããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸããã
Friend'sYard- > ãããªãã¯å°ããªæšè£œã®ãã§ã³ã¹ã®åŸãã®ãã€ãã¬ãŒãã³ã®åã«ç«ã£ãŠããŸããã
åº-> ãããªãã¯åºã«ããŸãã åºã¯ãšãŠããããã«èŠããŸããæž
æœã§ãtoå±ã§ã涌ããã湿ã£ãŠããŸããã
ãã以å€ã®å Žå -> "ååã®ããå Žæã®èª¬æã¯ãããŸãã" ++ show loc ++ "ã"
ãããŠä»ãghciã®å©ããåããã«ããdescribeLocation OtherRoomããšåŒã¶ãšã©ããªããŸããïŒ OtherRoomã³ã³ã¹ãã©ã¯ã¿ãŒãå°éããå Žæãã±ãŒã¹ã®åäœæ¹æ³ãéžæããããªãã·ã§ã³ãããã³ãã®ãªãã·ã§ã³ãè¿ãæååã®çš®é¡ã远跡ããŸãã çµãã£ãïŒ èªåã§ç¢ºèªããŠãã ããïŒ
*ã¡ã€ã³> describeLocation OtherRoom
ãOtherRoomãšããååã®å Žæã®èª¬æã¯ãããŸãããã
æ®å¿µãªãããç§ã¯ããªãã®ããã«ãã€ãæã£ãŠããŸããã ããããããªããæ£ããæšæž¬ããå Žåãããªãã¯ããªãèªèº«ãèªãã«æãããšãã§ããŸãã Show
åã¯ã©ã¹ããshowé¢æ°ãååŸããã³ã³ã¹ãã©ã¯ã¿ãŒãæååã«å€æããŸããã ãããã§ããïŒ ç§ã®æèŠã§ã¯ãã¯ãã ããšãã°ãC ++ã§ã¯ãåæã®èŠçŽ ãæååã«å€æããã®ã¯ç°¡åã§ã...
showé¢æ°ã¯éåžžã«äŸ¿å©ã§ãã Showå
ã¯ã©ã¹ãã Action
åãšDirection
åãç¶æ¿ããŸãã è² ããªãããšãçŽæããŸãïŒ
å®éã«ã¯ãHomeãFriend'sYardãGardenãªã©ã®ã¿ã€ãã³ã³ã¹ãã©ã¯ã¿ãŒã¯ã倧æåã§å§ãŸãããšãèš±å¯ãããŠããç¹å¥ãªæ©èœã§ãã ãããŠããããã¯é¢æ°ãªã®ã§ããããã«ã¯åããããŸãã "ïŒtype Home"ã³ãã³ãã¯äœãæäŸããŸããïŒ ã¯ããœã³å°åŠæ ¡ã§ãã
* Main>ïŒã¿ã€ãHome
ããŒã ::ãã±ãŒã·ã§ã³
ããã§ç§ã«åããªããã®ããããŸã åããŒãã®åé ã«ããZorkããã®åŒçšãèŠãŠãã ãããæåã«å Žæã®ååã衚瀺ããã次ã«æ°ããè¡ãã説æã衚瀺ãããŸãã describeLocationé¢æ°ãæžãçŽããŠã¿ãŸããã...ã¯ããã¯ãããŸãããã®ãããªããã声ã¯ãããŸããïŒ..説æã®åã«å Žæã®ååã衚瀺ãããã§ãã ãé¡ã«ããœãªã¥ãŒã·ã§ã³ïŒããã¹ãæååã«å Žæã®ååãåã蟌ã¿ãŸããã
describeLocation loc = ã±ãŒã¹ loc
ããŒã -> ãããŒã \ nããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸããã
Friend'sYard- > "Friend'sYard \ nããªãã¯å°ããªæšã®ãã§ã³ã¹ã®åŸãã®ãã€ãã¬ãŒãã³ã®åã«ç«ã£ãŠããŸãã"
åº-> ãåº\ nããªãã¯åºã«ããŸãã åºã¯ãšãŠããããã«èŠããŸããæž
æœã§ãtoå±ã§ã涌ããã湿ã£ãŠããŸããã
ãã以å€ã®å Žå -> "ååã®ããå Žæã®èª¬æã¯ãããŸãã" ++ show loc ++ "ã"
ãã¡ããåäœããŸãã 説æãæ±ãããå Žåã¯ãã©ããã ãããªæ°ãããŸãã ãªãã·ã§ã³çªå·2ïŒ
describeLocation loc = ã±ãŒã¹ loc
Home- > show loc ++ " \ n " ++ "æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸãã"
Friend'sYard- > show loc ++ " \ n " ++ "ããªãã¯å°ããªæšè£œã®ãã§ã³ã¹ã®åŸãã®ãã€ãã¬ãŒãã³ã®åã«ç«ã£ãŠããŸãã"
Garden- > show loc ++ " \ n " ++ "ããªãã¯åºã«ããŸãã åºã¯ãšãŠããããã«èŠããŸããæž
æœã§ãtoå±ã§ã涌ããã湿ã£ãŠããŸããã
ãã以å€ã®å Žå -> "ååã®ããå Žæã®èª¬æã¯ãããŸãã" ++ show loc ++ "ã"
ãã§ã«åªããŠããŸããããããã®ãã¹ãŠã®ãã©ã¹ã§å€ãã®äœæ¥ãè¿œå ãããŠããŸã...ãããŠç¹°ãè¿ãããš-æªãå³...ããã·ã³ãã«ã§ãšã¬ã¬ã³ããªæ¹æ³ããããŸãïŒ ããªãã®æãèŠãŠãã ããïŒ
describeLocation loc = show loc ++ " \ n " ++
ã®å Žåã®å Žæ
ããŒã -> ãããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸããã
Friend'sYard- > ãããªãã¯å°ããªæšè£œã®ãã§ã³ã¹ã®åŸãã®ãã€ãã¬ãŒãã³ã®åã«ç«ã£ãŠããŸããã
åº-> ãããªãã¯åºã«ããŸãã åºã¯ãšãŠããããã«èŠããŸããæž
æœã§ãtoå±ã§ã涌ããã湿ã£ãŠããŸããã
ãã以å€ã®å Žå -> "ååã®ããå Žæã®èª¬æã¯ãããŸãã" ++ show loc ++ "ã"
ç§constructã¯ãcaseæ§é ããcaseããšããåèªããæåŸã®éžæè¢ã®æåŸãŸã§ã®1ã€ã®å€§ããªè¡šçŸã§ãããšããããšã§ãã ä»ã®åŒã®äžã«ã±ãŒã¹ãåã蟌ãããšãã§ããŸãã ãã®å Žåãcaseã¯åžžã«æååãè¿ããŸããã€ãŸããå¥ã®æååã«è¿œå ã§ããŸãã ã³ãŒããããèªã¿ããããã¹ãªã ã«ãªããããçŸãããªããŸãã 3ã€ã®ãªãã·ã§ã³ããã¹ãŠãã¹ããããšãå¿
èŠãªãã®ãæäŸãããããšãããããŸãã
*ã¡ã€ã³> describeLocationããŒã
ãããŒã \ nããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸããã
* Main > putStrLn ïŒ LocationHomeãèšè¿°ïŒ
ããŒã
ããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸãã
ã±ãŒã¹ã®ãã¶ã€ã³ã¯ééããªãè¯ãã§ãã ãã ããäžäŸ¿ãªå ŽåããããŸãã æåã®éšåããåé¡No. 2ã解決ããå Žåãããªãã¯ãã§ã«ç§ã®æå³ãæšæž¬ããŠããŸãã ããã€ãã®xãšaã«å¯ŸããŠæ¬¡ã®é¢æ°ãå®è£
ããå¿
èŠããã£ãããšãæãåºãããŠãã ããã
| lnïŒabsïŒsinïŒxïŒïŒïŒx> 5ã®å Žå
y = | x <= 5ãã€a <= 3ã®å Žåãx ^ 2 + a ^ 2
| x / a + 7.8 * a x <= 5ããã³a> 3ã®å Žå
é¢æ°ãšããŠã®æ©èœãæ°åŠã§ã¯ãã®ãããªéã ããããif-then-elseãŸãã¯caseã䜿çšããŠHaskellã«å®è£
ããŠã¿ãŠãã ããã
y x a = x > 5ã® å Žå
次㫠log ïŒ abs ïŒ sin ïŒ x ïŒ ïŒ ïŒ
ä»ã«
x <= 5 && a <= 3ã®å Žå
次㫠x ^ 2 + a ^ 2
ãã以å€ã®å Žå x / a + 7.8 * a
y 'x a = case x > 5 ã®
True- > log ïŒ abs ïŒ sin ïŒ x ïŒ ïŒ ïŒ
False- > case x <= 5 && a <= 3 of
True- > x ^ 2 + a ^ 2
False- > x / a + 7.8 * a
ãã®é¢æ°ã¯ãããã€ãã®ã¬ãã«ã®ãã¹ãã®ããã«èªã¿ã«ãããªã£ãŠããŸãã æ¬åœã«ä»ã«æ¹æ³ã¯ãããŸãããïŒ..ããŠãã©ã®ããã«ïŒ ã»ãã¥ãªãã£è¡šçŸïŒ ãããŠãHaskellé¢æ°ã¯æ°åŠã®é¢æ°ã®ããã«ãªããŸãã åç
§ïŒ
y '' x a | x > 5 = log ïŒ abs ïŒ sin ïŒ x ïŒ ïŒ ïŒ
y '' x a | x <= 5 && a <= 3 = x ^ 2 + a ^ 2
y '' x a | ãã以å€ã®å Žå = x / a + 7.8 * a
-ãŸãã¯åãããšïŒ
y '' x a | x > 5 = log ïŒ abs ïŒ sin ïŒ x ïŒ ïŒ ïŒ
| x <= 5 && a <= 3 = x ^ 2 + a ^ 2
| ãã以å€ã®å Žå = x / a + 7.8 * a
xã5ãã倧ããå Žåãé¢æ°ã¯ãlogïŒabsïŒsinïŒxïŒxïŒïŒïŒãã®åœ¢åŒããšãããšã¯å®¹æã«ç解ã§ããŸãã ã¬ãŒãåŒã¯ãã|ãã®éã®åŒã§ã ããã³ã=ãã ã»ãã¥ãªãã£åŒã«ã€ããŠã¯ãcase-constructã®ä»£æ¿ãšåãæ³åãé©çšãããŸããåŒã®ã»ããã¯å®å
šã§ãªããã°ãªããã ããã§ãªããã°åžžã«æ©èœããŸãã
ããããã²ãŒã ã®èšèšã«æ»ããŸãããã ã©ã®ã²ãŒã ã«ããã€ãã³ããã³ãã©ãŒãäœåºŠãåŒã³åºãããã°ã©ãã£ãã¯ã¹ãç©çåŠãAIãèšç®ãããã³ãŒãããããŸãã ç§ãã¡ã®ã²ãŒã ã¯ç°¡åã§ãã ãŠãŒã¶ãŒã¯ããŒããŒãããã³ãã³ããå
¥åããŸã-ãããŠäœããèµ·ãããšã圌ã¯åã³ã³ãã³ããå
¥åããäœããåã³èµ·ãããŸãã ãã®ã¢ã«ãŽãªãºã ã®ãããªãã®ããããŸãïŒ
0.ã²ãŒã ç°å¢ã«ã€ããŠèª¬æããŸãã
-çŸåšã®å Žæã®èª¬æã衚瀺ããŸãã
-ãã±ãŒã·ã§ã³å
ã®ãªããžã§ã¯ãã®èª¬æã衚瀺ããŸãã
1.ãã¬ã€ã€ãŒããã®ããŒã ãæååãšããŠåŸ
ã£ãŠããŸãã
2.ããŒã ãèªèããããšããŠããŸãã
3aã ã³ãã³ããèªèãããå ŽåïŒ
-ãããå®è¡ããŸãã
-ãã€ã³ã0ã«æ»ããŸãã
3bã ã³ãã³ããèªèãããªãå ŽåïŒ
-ããã«é¢ããã¡ãã»ãŒãžãçºè¡ããŸãã
-ãã€ã³ã1ã«æ»ããŸãã
ããŒããã€ã³ã0ã®æºåãã§ããŸãããããã¯ãdescribeLocationãé¢æ°ã§ãã ãªããžã§ã¯ãã¯ãŸã ãããŸãããåŸã§è¿œå ããŸãã ãããã£ãŠãã¹ããã1ã«é²ã¿ãŸããããŒããŒãå
¥åãååŸããæ¹æ³ã¯ïŒ æåã®éšåã§ã¯ãå®éã®ã³ã³ãœãŒã«ã«æååãåºåããputStrLné¢æ°ã«ã€ããŠèª¬æããŸããã å察ã®é¢æ°ã§ããgetLineã«ç²Ÿéããæãæ¥ãŸããã 次ã®åªæãæ€èšããŠãã ããã
å®è¡=
ãã
x < -getLine
putStrLn x
ããªãã©ã·ãŒããšãã€ãŒã°ã«ã¢ã€ãã®ã¹ãã«ãã¢ããã°ã¬ãŒãããæãæ¥ãŸããïŒ å®è¡æ©èœã§äœãèµ·ãããŸããïŒ ããã€ãã®ç°¡åãªæé ã ããŒããŒãããã®è¡ïŒgetLineïŒãåŸ
ã£ãŠããŸãã ãã®è¡ã¯xã«é¢é£ä»ããããŠããŸãã å®éã®ã³ã³ãœãŒã«ã§xãå°å·ããŸãã ãããŠãã¢ã¯ã·ã§ã³ãé£éãããããã«ããdoãããŒã¯ãŒãã䜿çšãããŸã-Haskellèšèªã®ãã®ãããªæ©èœã ãããŠä»ãç§ãã¡ã¯çµéšããŸãïŒ
*ã¡ã€ã³>å®è¡
ããã«ã¡ã¯ïŒ -ç§ã玹ä»ããããš
ããã«ã¡ã¯ïŒ -putStrLné¢æ°ãåºåãããã®
*ã¡ã€ã³>å®è¡
kjljfs
kjljfs
ããäžåºŠïŒgetLineé¢æ°ã¯è¡ããšã«èŠæ±ããŸãã æååã¯å€æ°xã«ãã€ã³ãããã次ã®ã¹ãããã§ãputStrLné¢æ°ã¯xãåºåããŸãã è¡ãå
¥åããåã«ããã³ãã³ããå
¥åïŒãããã³ãããè¿œå ããŠæ確ã«ããŸãããã ãŠãŒã¶ãŒã«åœŒã欲ãããã®ãèŠãŠã¿ãŸãããã
run = do
putStr ãã³ãã³ããå
¥åïŒã
x < -getLine
putStrLn x
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒèŠãŠ
èŠãŠ
putStré¢æ°ã䜿çšããŸãããäœããåºåããŸãããã«ãŒãœã«ã¯æ°ããè¡ã«å€æãããŸããã äžè¬çã«ãPascalãšå®å
šã«é¡äŒŒããŠããŸãïŒwriteLn <=> putStrLnãwrite <=> putStrã
ãã¡ãããããªãã¯ãç§ããxã«å²ãåœãŠããã§ã¯ãªããxã«é¢é£ä»ããããšæžããŠããããšã«æ°ä»ããŸããã Haskellã«ã¯å²ãåœãŠããããŸããããã®ãããç¢å°ïŒ "<-"ïŒããããå²ãåœãŠèšå·ïŒ "="ã "ïŒ="ïŒã§ã¯ãããŸããã ç¢å°ã¯ãçµæãååŸããå Žæãšçµæãé¢é£ä»ãããã®ã瀺ããŠããŸãã åŠåãšææåã®éã«ã¯ãåºç¯å²ã«ãããçµæãšã®å€§ããªéãããããŸãã ãããããããã®çµæã䜿çšããªãéããå¿é
ããå¿
èŠã¯ãããŸããã
次ã«ããŠãŒã¶ãŒãå
¥åããã³ãã³ããå®è¡ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãåçŽãªé¢æ°ãevalActionããèãåºããrunããåŒã³åºããŸãã
evalAction :: æåå -> æåå
evalAction strAct = "ActionïŒ" ++ strAct ++ "ïŒ"
run = do
putStr ãã³ãã³ããå
¥åïŒã
x < -getLine
putStrLn ïŒ evalAction x ïŒ
-ãã¹ãïŒ
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒèŠãŠ
ãã¢ã¯ã·ã§ã³ïŒèŠãŠïŒã
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒçµäº
ãã¢ã¯ã·ã§ã³ïŒçµäºïŒã
ã»ã»ã» ç§ãã¡ã®ç©ºçœã¯ãééããªãåäœããŸãïŒ çŸåšã®ã¿ãevalActionã¯æååãåãåããç¹å¥ãªã¢ã¯ã·ã§ã³ã¿ã€ãã¯åãåããŸããã ãã®ãããä»»æã®ã¢ãã©ã«ããã©ãé¢æ°ã«æž¡ãããšãã§ããŸãã
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒlubaya _ abrakadabra
ãã¢ã¯ã·ã§ã³ïŒlubaya_abrakadabraïŒã
ç§ãã¡ã¯èª€è§£ãããŠããŸãã lubaya_abrakadabraãªã©ã®ã¢ã¯ã·ã§ã³ã¯ãããŸãã... describeLocationé¢æ°ã§æååãLocationã«çœ®ãæãããšããããªãã¯ããã§ã«äœããã®åœ¢ã§è¡ã£ãŠããŸãã ããã§ç¹°ãè¿ããšã©ããªããŸããïŒ è¡ãActionã«çœ®ãæããŸãã
evalAction ::ã¢ã¯ã·ã§ã³-> æåå
evalAction act = "ActionïŒ" ++ show act ++ "ïŒ"
run = do
putStr ãã³ãã³ããå
¥åïŒã
x < -getLine
putStrLn ïŒ evalAction x ïŒ
evalActionã®èŠãç®ã¯è¯ãããã§ããååãšããŠæå³äžæãªãã®ãæž¡ãããšã¯ã§ãããã³ã³ã¹ãã©ã¯ã¿ã¯ãã®ãããªåå§çãªæ¹æ³ã§åŠçãããŸãã ãããããã®ã³ãŒãã«ã¯å°ãåé¡ããããŸããã³ã³ãã€ã«ãããŸããã
*ã¡ã€ã³> ïŒr
[ 1 of 1 ] Mainã®ã³ã³ãã€ã«ïŒ HïŒ\ Haskell \ QuestTutorial \ Quest \ QuestMainãHs ã解éæžã¿ïŒ
HïŒ\ Haskell \ QuestTutorial \ Quest \ QuestMain hsïŒ 46 ïŒ 38 ïŒ
äºæãããã¿ã€ã 'Action'ãšå®éã®ã¿ã€ã ' [ Char ] 'ãäžèŽãããããšãã§ããŸããã§ãã
æåŸ
ãããã¿ã€ã ïŒã¢ã¯ã·ã§ã³
å®éã®ã¿ã€ã ïŒ æåå
'evalAction'ã®æåã®åŒæ°ãã€ãŸã 'x'
' putStrLn 'ã®æåã®åŒæ°ãã€ãŸã ' ïŒ evalAction x ïŒ '
倱æããã¢ãžã¥ãŒã«ãããŒããããŸããïŒãªãã
GHCiã¯ãã¿ã€ããäžèŽããªãããšã瀺ããŠããŸãã evalActioné¢æ°ã¯ãStringã§ã¯ãªãActionã¿ã€ããå¿
èŠãšããŸãã ããã§ãã¹ãç¯ããŸããïŒãputStrLnïŒevalAction xïŒãã ãžã...ãããããã®ãããªã¢ã€ãã¢ã¯è¯ããã®ã§ããïŒ..
Haskellã§ããã°ã©ãã³ã°ãè¡ãå Žåãå
¥åãšã©ãŒãããçºçããŸãã ããã«ã¯äœã®åé¡ããããŸããã 圌ãã¯ãäžäžèŽãã©ãã«ããã®ããäœãåŸããããšäºæ³ãããã®ãïŒæåŸ
ãããã¿ã€ãïŒããããŠå®éã«åãåã£ãã®ã¯ïŒå®éã®ã¿ã€ãïŒãšèšããŸãã ééã£ãã³ãŒããã³ã³ãã€ã«ããããšã¯ã§ããŸããã å€ãã®ãªãã¡ã¯ã¿ãªã³ã°ã«ãããæ倧ã§æ°åã®ãšã©ãŒãçºçããå¯èœæ§ããããããã«å€ãã®ãšã©ãŒãçºçããå¯èœæ§ããããŸãããšã©ãŒããã¹ãŠè§£æ±ºããå¿
èŠããããŸãã ãããŠãããã¯éåžžã«ã¯ãŒã«ã§ãïŒ
æååãxãããActionã¿ã€ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãååŸããã«ã¯ãããã€ãã®è§£æ±ºçããããŸãã æåã«ãconvertStringToActioné¢æ°ãèããŠã¿ãŸãããã ã3ããžã®è³ªåïŒæååãã¢ã¯ã·ã§ã³ã«å€æããé¢æ°ã®ã¿ã€ãã¯äœã§ããïŒ ããã¯æããã§ãïŒ
convertStringToAction :: æåå ->ã¢ã¯ã·ã§ã³
æãç°¡åãªæ¹æ³ã¯ãã±ãŒã¹ã䜿çšããããšã§ãã æåŸã®éžæè¢ã§ã¯ãäœããçºçããå Žåã«å®å
šã«ãã¬ã€ããQuitãè¿ããŸãã
convertStringToAction :: æåå ->ã¢ã¯ã·ã§ã³
convertStringToAction str = case str of
èŠãŠ ->èŠãŠ
ãæ°èŠã ->æ°èŠ
ãã以å€ã®å Žå ->çµäº
runé¢æ°ã§evalActionãåŒã³åºããšãã«æ¿å
¥ããããšããå§ãããŸãã ãã®ããã«ïŒ
-ã¢ã¯ã·ã§ã³ãåŠçããŸãã
evalAction ::ã¢ã¯ã·ã§ã³-> æåå
evalAction act = "ActionïŒ" ++ show act ++ "ïŒ"
-æååãã¢ã¯ã·ã§ã³ã«å€æ
convertStringToAction :: æåå ->ã¢ã¯ã·ã§ã³
convertStringToAction str = case str of
èŠãŠ ->èŠãŠ
ãæ°èŠã ->æ°èŠ
ãã以å€ã®å Žå ->çµäº
-ããŒããŒãå
¥åãååŸããã¢ã¯ã·ã§ã³ã«å€æãããã³ãã©ãŒãåŒã³åºããçµæã衚瀺ããŸãã
run = do
putStr ãã³ãã³ããå
¥åïŒã
x < -getLine
putStrLn ïŒ evalAction ïŒ convertStringToAction x ïŒ ïŒ
ä»ç¢ºèªããŠãã ããïŒ
*ã¡ã€ã³> ïŒr
[ 1 of 1 ] Mainã®ã³ã³ãã€ã«ïŒ HïŒ\ Haskell \ QuestTutorial \ Quest \ QuestMainãHs ã解éæžã¿ïŒ
OK ãããŒããããã¢ãžã¥ãŒã«ïŒMain
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒèŠãŠ
ã¢ã¯ã·ã§ã³ïŒèŠãŠïŒ
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒdfdf
ã¢ã¯ã·ã§ã³ïŒçµäºïŒ
ããŠãããã¯åå©ã§ãïŒ çŸåšãevalActioné¢æ°ã¯æååã§ã¯ãªããActionã§æ©èœããŸãã ãã¹ãŠã¯å€§äžå€«ã§ããã... Look以å€ã®ããŒã ãè¿œå ããããšããã©ãã ãã®äœæ¥ãæ®ã£ãŠãããããããŸããïŒ ã¿ã€ãã«ã¯10çš®é¡ãããŸããLookãGoãInventoryãTakeãDropãInvestigateãQuitãSaveãLoadãNewãªã©ã衚瀺ãããŸãã ãããŠãäœåãé¢æ°convertStringToActionã®case-constructionãæ¡åŒµããã®ã§ããããïŒ æ¬åœã«ããããªã...
ãšããã§ãèãã®ç³§ïŒconvertStringToActioné¢æ°ãèšè¿°ããæ¹æ³ã¯ããã«2ã€ãããŸãã 説æãªãã®è«æã
-ã¬ãŒãåŒïŒã¬ãŒãïŒ
convertStringToAction ' :: æåå ->ã¢ã¯ã·ã§ã³
convertStringToAction 'str | str == â Lookâ = Look
| str == "æ°èŠ" =æ°èŠ
| ãã以å€ã®å Žå =çµäº
-ãã¿ãŒã³ãããã³ã°
convertStringToAction '' :: æåå ->ã¢ã¯ã·ã§ã³
convertStringToAction '' â Lookâ = Look
convertStringToAction '' "New" =æ°èŠ
convertStringToAction '' _ =çµäº
-ghciããã§ãã¯ã€ã³ãã
*ã¡ã€ã³> convertStringToAction ' "æ°èŠ"
æ°ãã
*ã¡ã€ã³> convertStringToAction '' "æ°èŠ"
æ°ãã
ããããŠãäœåãé¢æ°convertStringToActionã®å€§æåãšå°æåã®æ§é ãæ¡åŒµããã®ã§ããããïŒ ç§ã¯æ¬åœã«ããããªã... "-ã©ããªçµ¶æã®ã¡ã¢ïŒïŒ.. Haskellã¯æ languageãªèšèªã§ãããå®éã®ããã°ã©ããŒã¯ãå¿
èŠã®ãªãå Žæã«äœåãªã³ãŒããæžããªãããã«æ zyã§ããã¹ãã§ãã ã±ãŒã¹ãæ¡å€§ããããªãã§ããïŒ ããªãã§ãã ããïŒ ç§ãã¡ã¯äœãããŸããïŒ æºåãããªããïŒ æ°ããåªæãåŠãã§ããŸãïŒ ã¬ã³ãŒãïŒãèªã¿åãããã³èªã¿åãé¢æ°ãå«ãèªã¿åã
åã¯ã©ã¹ ãã Readãããã¹ãŠã®ADTã¿ã€ããèªã¿åãããããã©ãã«ã€ãªãããã確èªããŸãã
ããŒã¿ã®å Žæ=
ããŒã
...
å°åº ïŒ Eq ã Show ã Read ïŒ
ããŒã¿ã®æ¹å=
å
...
å°åº ïŒ Eq ã Show ã Read ïŒ
ããŒã¿ã¢ã¯ã·ã§ã³=
èŠãŠ
...
å°åº ïŒ Eq ã Show ã Read ïŒ
èªã¿åãæ©èœãæããããã«ãghciã§å°ãéã³ãŸãããã æ¯èŒã®ããã®2ã€ã®äŸïŒ
*ã¡ã€ã³> describeLocationããŒã
ãããŒã \ nããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸããã
* Main > describeLocation ïŒ ãããŒã ãã èªã ïŒ
ãããŒã \ nããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸããã
ã©ã®ãããªçµè«ãåºãããšãã§ããŸããïŒ describeLocationé¢æ°ã¯å€æŽãããŠããŸããããLocationã¿ã€ããå¿
èŠã§ãã æåã®äŸã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãæž¡ãã2çªç®ã®äŸã§ã¯ããHomeãè¡ããååŸããŸãã
* Main > describeLocation ïŒ read ïŒ show Home ïŒ ïŒ
ãããŒã \ nããªãã¯æšè£œã®ããŒãã«ã®çãäžã®éšå±ã«ç«ã£ãŠããŸããã
èªã¿åãé¢æ°ã¯æååãåãåãããã®å Žæã§å¿
èŠãªã¿ã€ãã«è§£æããããšããŸãã èªã¿åãã¯åã«ã€ããŠã©ã®ããã«ç¥ãã®ã§ããïŒ åœŒã¯åšå²ã®è¡šçŸããããããåããŸãã ãã®å Žåã圌ã¯ïŒ "Home"ãšèªãïŒãdescribeLocationé¢æ°ã®ãã©ã¡ãŒã¿ãŒã§ããããã©ã¡ãŒã¿ãŒã¿ã€ããå³å¯ã«èšå®ãããŠããããšã確èªããŸãã åãã©ãã«ããšããªãå ŽåããããŸãããéåžžã«ãŸãã§ãã ç°¡åãªäŸïŒghci㧠'read "Home"ãåŒã³åºããšãã³ã³ãã€ã©ã¯ç§ãã¡ãç解ããŸããïŒ
*ã¡ã€ã³> ãããŒã ãã èªã
<ã€ã³ã¿ã©ã¯ãã£ã> ïŒ 1 ïŒ 1 ïŒ
å¶çŽã®ãããŸããªåå€æ° 'a0'ïŒ
ïŒ read a0 ïŒ ' read 'ã®äœ¿çšããçãã
èããããä¿®æ£ïŒãããã®åå€æ°ãä¿®æ£ããåã·ã°ããã£ãè¿œå ããŸãïŒ s ïŒ
åŒã§ïŒ ãããŒã ãã èªã
ãitãã®æ¹çšåŒïŒit = read "Home"
ãã ããç¹å¥ãªãšã³ããªã䜿çšããŠæ瀺çã«ã¿ã€ããæå®ããããšã§ã圌ãæ¯æŽã§ããŸãã
*ã¡ã€ã³> ãããŒã ãã èªã ::å Žæ
ããŒã
* Main > read "5.5" :: ãããŒã
5.5
* Main > read "True" :: Bool
éæ³ã§ããã convertStringToActioné¢æ°ã«èªã¿åããå®è£
ãããšãããçãæ©èœçãªã³ãŒããåŸãããŸãã
-ã¢ã¯ã·ã§ã³ãåŠçããŸãã
evalAction ::ã¢ã¯ã·ã§ã³-> æåå
evalAction act = "ActionïŒ" ++ show act ++ "ïŒ"
-æååãã¢ã¯ã·ã§ã³ã«å€æ
convertStringToAction :: æåå ->ã¢ã¯ã·ã§ã³
convertStringToAction str = èªã¿åã str
-ããŒããŒãå
¥åãååŸããã¢ã¯ã·ã§ã³ã«å€æãããã³ãã©ãŒãåŒã³åºããçµæã衚瀺ããŸãã
run = do
putStr ãã³ãã³ããå
¥åïŒã
x < -getLine
putStrLn ïŒ evalAction ïŒ convertStringToAction x ïŒ ïŒ
-ghciããã§ãã¯ã€ã³ããŸãã
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒèŠãŠ
ã¢ã¯ã·ã§ã³ïŒèŠãŠïŒ
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒçµäº
ã¢ã¯ã·ã§ã³ïŒçµäºïŒ
æ®å¿µãªãããreadã«ã¯é倧ãªæ¬ ç¹ã1ã€ãããŸããabracadabraãæž¡ããšãäŸå€ãçºçããããã°ã©ã ãçµäºããŸãã
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒabrakadabra
ã¢ã¯ã·ã§ã³ïŒ ***äŸå€ïŒ ãã¬ãªã¥ãŒã ã èªã¿åã ïŒè§£æãªã
èœèããªãã§ãã ããïŒ ããå®å
šãªèªã¿åãæ©èœããããŸãã ãã¡ãããç§ã¯ããã䜿çšããæ¹æ³ã瀺ããŸãããå°æ¥ã®ããã«èª¬æãæ®ããŸãã ä»æ¥ã¯ã¢ã¯ã·ã§ã³ïŒãããŠïŒ äŒæ¯ããåªæãåŠã³ãŸãã
convertStringToAction :: æåå ->ã¢ã¯ã·ã§ã³
convertStringToAction str = ã±ãŒã¹ã¯ str ã èªã¿åããŸã
[ ïŒ x ã _ ïŒ ] -> x
_- >çµäº
*ã¡ã€ã³>å®è¡
ã³ãã³ããå
¥åïŒabrakadabra
ã¢ã¯ã·ã§ã³ïŒçµäºïŒ
ä¿®æ£ã®ããã®å²ãåœãŠã
1.ã¯ãšã¹ãã®å¯Ÿè±¡ããã³èª¿æ»ã¢ã¯ã·ã§ã³ã
-ADTãããªããžã§ã¯ããã«ããŠãããã«ãªããžã§ã¯ããè¿œå ããŸãã
-ãªããžã§ã¯ãã®èª¬æãæäŸããé¢æ°describeObjectãäœæããŸãã
-æ©èœèª¿æ»ãäœæããŸããããã¯ããŠãŒã¶ãŒã«ãªããžã§ã¯ãã®ååãå°ãããã®ãªããžã§ã¯ãã®èª¬æã衚瀺ããŸãã
2.ããã°ã©ã ããã é»åãã
æŽæ°æŒç®ãè¿œå ââãããæžç®ãããä¹ç®ãããããŸãã
ãŠãŒã¶ãŒã«integer1ãèŠæ±ãã次ã«æŽæ°æŒç®ãèŠæ±ããinteger2ãèŠæ±ããããã°ã©ã ãäœæããŸãã ããããã¹ãŠåä¿¡ããããšãããã°ã©ã ã¯çªå·ã«å¯ŸããŠå¯Ÿå¿ããæäœãå®è¡ããçµæã衚瀺ããå¿
èŠããããŸãã
ãã®éšåã®ãœãŒã¹ ã
ç®æ¬¡ããªãã¡ã¬ã³ã¹ã®ãªã¹ããããã³è¿œå æ
å ±ã¯
ãã°ãªãŒãã£ã³ã°ã«ãããŸãã