ðããã°ã©ãã³ã°èšèªã«ãããå€éç¶æ¿åé¡ãšJèšèªã®ãã©ãŒã¯
å€éç¶æ¿ã¯ãäžã€ã®ã¯ã©ã¹ãè€æ°ã®ã¯ã©ã¹ããç¶æ¿ããããšãæããŸããããã¯äžéšã®ããã°ã©ã èšèªã§ãµããŒããããŠããŸãããå€éç¶æ¿ãæã€åé¡ïŒäŸ: ãã€ã€ã¢ã³ãåé¡ïŒãé¿ããããã«ãå€ãã®èšèªã¯åäžç¶æ¿ã®ã¿ããµããŒãããã€ã³ã¿ãŒãã§ã€ã¹ãããã¯ã¹ã€ã³ãå§è²ãªã©ã®ä»ã®æ段ãæäŸããŠããŸãã
å€éç¶æ¿ã®ãã€ã€ã¢ã³ãåé¡
å€éç¶æ¿ã®ãã€ã€ã¢ã³ãåé¡ïŒæã ãè±åœ¢ã®åé¡ããšãåŒã°ããïŒã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã«ãããå€éç¶æ¿ã®é£ããã瀺ãå žåçãªåé¡ç¹ã®äžã€ã§ãããã®åé¡ã¯ãäºã€ä»¥äžã®ã¯ã©ã¹ããç¶æ¿ããå Žåã«ãåãåºåºã¯ã©ã¹ãå ±æããããšã§çããå¯èœæ§ããããŸãã
åé¡ã®ã·ããªãªãã·ã³ãã«ãªäŸã§èª¬æããŸãïŒ
ã¯ã©ã¹Aãåºåºã¯ã©ã¹ãšããŠæã€ã
ã¯ã©ã¹Bãšã¯ã©ã¹Cã¯ãã¯ã©ã¹Aãç¶æ¿ããã
ã¯ã©ã¹Dã¯ãã¯ã©ã¹Bãšã¯ã©ã¹Cã®äž¡æ¹ãç¶æ¿ããã
ãã®æ§æã§ãã¯ã©ã¹Dã¯ã¯ã©ã¹Aã®ç¹æ§ïŒã¡ãœãããå±æ§ïŒãéæ¥çã«äºåç¶æ¿ããŠããŸããŸããã¯ã©ã¹Dã®ã€ã³ã¹ã¿ã³ã¹ãã¯ã©ã¹Aã®ããã¡ãœãããåŒã³åºãå Žåããã®ã¡ãœããã®å®è£ ã¯ã¯ã©ã¹Bããæ¥ãã®ãããããšãã¯ã©ã¹Cããæ¥ãã®ããæ確ã§ãªããªããŸããããããã€ã€ã¢ã³ãåé¡ã§ãã
äž»èŠèšèªã®å€éç¶æ¿ãµããŒããšä»£æ¿æ段ãŸãšã
以äžã¯ãããã€ãã®äž»èŠãªããã°ã©ã èšèªã®å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³ãšä»£æ¿æ段ã«ã€ããŠã®æŠèŠã§ãïŒ
C++:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸãã
代æ¿æ段: éåžžã¯å¿ èŠãªãããä»®æ³ç¶æ¿ã䜿çšããŠãã€ã€ã¢ã³ãåé¡ã解決ããããšãã§ããŸãã
Java:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ã¯ã©ã¹ã®å€éç¶æ¿ã¯ãµããŒããããŠããŸããã
代æ¿æ段: ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠè€æ°ã®APIãç¶æ¿ã§ããŸãããŸããJava 8以éã®ããã©ã«ãã¡ãœããã䜿çšããŠãã€ã³ã¿ãŒãã§ã€ã¹ã«å®è£ ãæãããããšãã§ããŸãã
Python:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸãã
代æ¿æ段: Pythonã¯C3ç·åœ¢åãšããã¢ã«ãŽãªãºã ã䜿çšããŠç¶æ¿ã®é åºã解決ããŸããããã¯ã¹ã€ã³ã䜿çšããŠåå©çšãä¿é²ããããšãäžè¬çã§ãã
Ruby:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: ã¢ãžã¥ãŒã«ãããã¯ã¹ã€ã³ã䜿çšããŠã¡ãœãããæ¯ãèããè€æ°ã®ã¯ã©ã¹ã«åå©çšã§ããŸãã
C#:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ã¯ã©ã¹ã®å€éç¶æ¿ã¯ãµããŒããããŠããŸããã
代æ¿æ段: ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠè€æ°ã®APIãç¶æ¿ã§ããŸããå§è²ã䜿çšããŠå®è£ ãåå©çšããããšãäžè¬çã§ãã
PHP:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ã¯ã©ã¹ã®å€éç¶æ¿ã¯ãµããŒããããŠããŸããã
代æ¿æ段: ãã¬ã€ãïŒTraitsïŒã䜿çšããŠãäžé£ã®ã¡ãœãããè€æ°ã®ã¯ã©ã¹ã«åå©çšã§ããŸãã
JavaScript:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: ãããã¿ã€ããã§ãŒã³ãå©çšããŠç¶æ¿ãè¡ããŸããããã¯ã¹ã€ã³ã䜿çšããŠè€æ°ã®ãªããžã§ã¯ãããã¡ãœãããããããã£ãçµã¿åãããããšãå¯èœã§ãã
Swift:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ã¯ã©ã¹ã®å€éç¶æ¿ã¯ãµããŒããããŠããŸããã
代æ¿æ段: ãããã³ã«ã䜿çšããŠè€æ°ã®APIãç¶æ¿ã§ããŸãããããã³ã«æ¡åŒµã䜿çšããŠããããã³ã«ã«å®è£ ãè¿œå ããããšãã§ããŸãã
Haskell:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: Haskellã¯é¢æ°åèšèªã§ãããäŒçµ±çãªã¯ã©ã¹ããŒã¹ã®ç¶æ¿ã®æŠå¿µãååšããªãã
代æ¿æ段: åã¯ã©ã¹ã䜿çšããŠç¹å®ã®æ¯ãèããå®çŸ©ããè€æ°ã®åã«å¯ŸããŠå®è£ ã§ããŸãã
TypeScript:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããïŒJavaScriptããŒã¹ã®èšèªã§ããããïŒã
代æ¿æ段: ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠè€æ°ã®APIãç¶æ¿ã§ããŸããããã¯ã¹ã€ã³ãã¿ãŒã³ãå©çšããŠè€æ°ã®ã¯ã©ã¹ããã¡ãœãããããããã£ãçµã¿åãããããšãå¯èœã§ãã
Erlang:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: Erlangã¯é¢æ°åèšèªã§ãããäŒçµ±çãªã¯ã©ã¹ããŒã¹ã®ç¶æ¿ã®æŠå¿µãååšããªãã
代æ¿æ段: ã¢ãžã¥ãŒã«ãåå©çšããŠé¢æ°ãå ±æããããšãã§ããŸãã
APL:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: APLã¯é åæåã®ããã°ã©ã èšèªã§ãããäŒçµ±çãªç¶æ¿ã®æŠå¿µã¯æããªãã
代æ¿æ段: NAïŒè©²åœãªãïŒ
Rust:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: ãã¬ã€ãã䜿çšããŠãç¹å®ã®æ¯ãèããå®çŸ©ããè€æ°ã®æ§é äœãenumã«å¯ŸããŠå®è£ ã§ããŸãããã¬ã€ããªããžã§ã¯ãã䜿çšããŠãç°ãªããã¬ã€ãã1ã€ã®åãšããŠæ±ãããšãã§ããŸãã
J:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: Jã¯é¢æ°åèšèªã®ç¹æ§ãæã¡ãäŒçµ±çãªã¯ã©ã¹ããŒã¹ã®ç¶æ¿ã®æŠå¿µãååšããªãã
代æ¿æ段: NAïŒè©²åœãªãïŒ
Go (Goèšèª):
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠæ¯ãèããå®çŸ©ããããšãã§ããäžã€ã®åãè€æ°ã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããããšãå¯èœã§ãããŸããåã蟌ã¿ãã£ãŒã«ãã䜿ã£ãŠäžã€ã®æ§é äœã®äžã«å¥ã®æ§é äœãåã蟌ãããšãã§ããŸãã
Julia:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: Juliaã¯åã®ç¶æ¿ãããããã¬ã€ãããšåŒã°ããæŠå¿µãäžå¿ã«ããŠèšèšãããŠããŸãããŸããJuliaã®å€éãã£ã¹ãããã«ãããé¢æ°ã®æ¯ãèããæ§ã ãªåã®çµã¿åããã§å®çŸ©ã§ããŸãã
R:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: äŒçµ±çãªã¯ã©ã¹ããŒã¹ã®å€éç¶æ¿ã¯ãµããŒããããŠããŸããã
代æ¿æ段: Rã®S4ã¯ã©ã¹ã·ã¹ãã ã§ã¯ãäžã€ã®ã¯ã©ã¹ãè€æ°ã®ã¯ã©ã¹ããç¶æ¿ãããããªåœ¢ã®ãå€éç¶æ¿ããå¯èœã§ããããããããã¯äŒçµ±çãªå€éç¶æ¿ãšã¯ç°ãªãã
Lisp (ç¹ã«Common Lispã«åºã¥ããŠèª¬æããŸã)ïŒ
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸãã
代æ¿æ段: å€éç¶æ¿ã«é¢é£ããåé¡ã解決ããããã®ç¹å®ã®æ¹æ³ãäŸãã°CLOSïŒCommon Lisp Object SystemïŒã®ã¡ãœããã®çµã¿åããã«ãŒã«ããããŸãã
Scala:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ã¯ã©ã¹ã®å€éç¶æ¿ã¯ãµããŒããããŠããŸããã
代æ¿æ段: ãã¬ã€ãïŒtraitsïŒã䜿çšããŠãã¡ãœãããããããã£ãè€æ°ã®ã¯ã©ã¹ã«åå©çšã§ããŸããScalaã®ãã¬ã€ãã¯ãå®è£ ãæã€ããšãã§ãããããå€éç¶æ¿ã®ãããªåå©çšãå¯èœãšãªããŸãã
OCaml:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: OCamlã§ã¯ã¢ãžã¥ãŒã«ãšã¢ãžã¥ãŒã«ã®ã·ã°ããã£ãå©çšããŠã³ãŒãã®åå©çšãå®çŸããŸãããŸãããªããžã§ã¯ãæåã®ç¹æ§ããµããŒãããŠãããã¯ã©ã¹ãšãªããžã§ã¯ãã䜿çšããŠç¶æ¿ãè¡ãããšãã§ããŸãããäžåºŠã«è€æ°ã®ã¯ã©ã¹ãç¶æ¿ããããšã¯ã§ããŸããã
Smalltalk:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: Smalltalkã¯ãããã¿ã€ãããŒã¹ã®ãªããžã§ã¯ãæåèšèªã§ããç¶æ¿ã¯ã·ã³ã°ã«ãã³ã¯ã©ã¹ãéããŠè¡ãããŸããå€éç¶æ¿ã®ä»£ããã«ããã¬ã€ãããããã³ã«ã䜿çšããŠã¡ãœãããåå©çšããããšãäžè¬çã§ãã
Objective-C:
å€éç¶æ¿ã®å¯Ÿå¿ç¶æ³: ãµããŒããããŠããŸããã
代æ¿æ段: Objective-Cã§ã¯ãããã³ã«ïŒJavaãSwiftã®ã€ã³ã¿ãŒãã§ã€ã¹ã«äŒŒãŠããŸãïŒã䜿çšããŠè€æ°ã®APIãå®è£ ã§ããŸããããã«ãããããã¯ã©ã¹ãè€æ°ã®ãããã³ã«ãæ¡çšããããšãã§ããŸãããããã³ã«ã¯å®è£ ãæã€ããšã¯ã§ããŸãããããããã³ã«ã®ã¡ãœãããã©ã®ã¯ã©ã¹ã§ãåå©çšããããšãã§ããŸãã
å€éç¶æ¿ã®è§£æ¶æ段ããšã®ç¹åŸŽ
ä»®æ³ç¶æ¿ïŒVirtual InheritanceïŒ:
çšé: äž»ã«C++ã§äœ¿çšãããã
説æ: ä»®æ³ç¶æ¿ã¯ãåºåºã¯ã©ã¹ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãæã€ã®ãé²ãããã®ãã®ã§ããä»®æ³ç¶æ¿ã䜿çšãããšãç¶æ¿ãã§ãŒã³ã«ãããŠåºåºã¯ã©ã¹ã®åäžã®ã€ã³ã¹ã¿ã³ã¹ã®ã¿ãååšããŸãã
å©ç¹: ãã€ã€ã¢ã³ãåé¡ãåé¿ã§ããŸãã
ãã¬ã€ãïŒTraitïŒ:
çšé: Scala, Rust, PHP ãªã©ã®èšèªã§äœ¿çšãããã
説æ: ãã¬ã€ãã¯åå©çšå¯èœãªã¡ãœããã®éåã§ãããã¯ã©ã¹éã§ã³ãŒããå ±æããããã«äœ¿çšãããŸããã¯ã©ã¹ã¯è€æ°ã®ãã¬ã€ããæã€ããšãã§ããŸãã
å©ç¹: å€éç¶æ¿ã®ã¡ãªãããæã¡ãªããããã€ã€ã¢ã³ãåé¡ã®ãªã¹ã¯ãé¿ããããšãã§ããŸãã
ãããã³ã«ïŒProtocolïŒ / ã€ã³ã¿ãŒãã§ã€ã¹ïŒInterfaceïŒ:
çšé: Objective-C, Swift, Java ãªã©ã®èšèªã§äœ¿çšãããã
説æ: ãããã³ã«ãã€ã³ã¿ãŒãã§ã€ã¹ã¯ãå®è£ ãæããªãã¡ãœããã®å®çŸ©ã®éãŸãã§ããã¯ã©ã¹ã¯ãããã®ãããã³ã«ãã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããããšã§ããã®ã¡ãœãããæã€ããšãä¿èšŒããŸãã
å©ç¹: è€æ°ã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããããšãã§ããå€éç¶æ¿ã®ããã«è€æ°ã®åäœãçµã¿èŸŒãããšãã§ããŸãããå®è£ ã®è¡çªã¯çºçããŸããã
ããã¯ã¹ã€ã³ïŒMixinïŒ:
çšé: Python, Ruby ãªã©ã®èšèªã§äœ¿çšãããã
説æ: ããã¯ã¹ã€ã³ã¯ãè€æ°ã®ã¯ã©ã¹ã«ãŸããã£ãŠåå©çšã§ããã¡ãœããã®éåäœã§ããããã¯ã¹ã€ã³èªäœã¯åç¬ã§ã€ã³ã¹ã¿ã³ã¹åãããããšãæå³ããŠããŸããã
å©ç¹: å€éç¶æ¿ã®è€éããªãã«ãç¹å®ã®æ©èœãè€æ°ã®ã¯ã©ã¹ã«è¿œå ããããšãã§ããŸãã
åãµã³ãã«ã«ã€ããŠã®ç°¡åãªè§£èª¬ãè¡ããŸãã
ä»®æ³ç¶æ¿ïŒVirtual InheritanceïŒ - C++
解説:
Base ãšããåºåºã¯ã©ã¹ãå®çŸ©ããŠããŸãããã®ã¯ã©ã¹ã«ã¯ show ãšããã¡ãœããããããŸãã
Derived1 ãš Derived2 㯠Base ããä»®æ³ç¶æ¿ã䜿ã£ãŠç¶æ¿ããŠããŸããä»®æ³ç¶æ¿ã¯ virtual ããŒã¯ãŒãã«ãã£ãŠç€ºãããŸãã
Derived3 㯠Derived1 ãš Derived2 ã®äž¡æ¹ããç¶æ¿ããŠããŸãã
ä»®æ³ç¶æ¿ã®ãããã§ãDerived3 ã®ãªããžã§ã¯ãã䜿ã£ãŠ show ã¡ãœãããåŒã³åºããšãã«ãææ§ãããªããBase ã¯ã©ã¹ã®ã¡ãœãããæ£ç¢ºã«1åã ãåŒã³åºãããŸãã
class Base {
public:
void show() { cout << "Base class method" << endl; }
};
class Derived1 : virtual public Base { };
class Derived2 : virtual public Base { };
class Derived3 : public Derived1, public Derived2 { };
int main() {
Derived3 d;
d.show(); // This calls the method from Base class without ambiguity
return 0;
}
ãã¬ã€ãïŒTraitïŒ - Rust
ãããã³ã«ïŒ - Swift
ããã¯ã¹ã€ã³ïŒMixinïŒ - Python
第äºã®éžæããã©ãŒã¯ã
ãã©ãŒã¯ã®æŠå¿µã¯ãJèšèªã®é¢æ°åæã®åœ¢åŒã§ãããç¹ã«é¢æ°åããã°ã©ã ã«ãããŠé¢æ°ãçµã¿åãããŠæ°ããé¢æ°ãäœæããæ¹æ³ãæäŸããŸããå€éç¶æ¿ãã³ã³ãããŒã¿ããããŠãã©ãŒã¯ã¯ãããããã©ã ã®æŠå¿µãã¿ã¯ãã£ãã¯ãæããŸãããããããé¢æ°ããªããžã§ã¯ãã®åå©çšãçµã¿åããã匷åããç¹ã§äžå®ã®é¢é£æ§ãæã€ããšã¯ç¢ºãã§ãã
å€éç¶æ¿: ãªããžã§ã¯ãæåããã°ã©ã ã®æèã§ã®ãã®ã§ãã¯ã©ã¹ãè€æ°ã®èŠªã¯ã©ã¹ããç¶æ¿ããããšãæããŸããããã¯ãç°ãªããœãŒã¹ããã®å±æ§ãã¡ãœããã1ã€ã®æ°ããã¯ã©ã¹ã«çµ±åããæ段ãšããŠäœ¿çšãããŸãã
ã³ã³ãããŒã¿: äž»ã«é¢æ°åããã°ã©ã ã®æèã§äœ¿çšããããåŒæ°ãšããŠé¢æ°ãåãããããã®é¢æ°ãçµã¿åãããŠæ°ããé¢æ°ãè¿ãé¢æ°ãæããŸããã³ã³ãããŒã¿ã¯ãé¢æ°åæã®åœ¢åŒãæäŸããããé«åºŠãªé¢æ°ãåçŽãªé¢æ°ããæ§ç¯ããããã®æ段ãšããŠäœ¿çšãããŸãã
ãã©ãŒã¯ (Jèšèª): ããã¯ç¹å®ã®ããã°ã©ã èšèªãJèšèªã«ãããŠé¢æ°ãçµã¿åãããæ¹æ³ãæããŸãããã©ãŒã¯ã¯3ã€ã®é¢æ°ãåããããããç¹å®ã®æ¹æ³ã§çµã¿åãããŠæ°ããé¢æ°ãäœæããŸãã
ãããã®æŠå¿µã®å ±éç¹ã¯ãæ¢åã®éšåïŒã¯ã©ã¹ãé¢æ°ãªã©ïŒãçµã¿åãããŠæ°ããéšåãäœæããããšã«ãããŸãããããããããã®å ·äœçãªäœ¿ãæ¹ãç®çããããŠæèã¯ç°ãªããŸãã
ãã©ãŒã¯ã¯ã³ã³ãããŒã¿ãªã®ãïŒ
Jèšèªã®ãã©ãŒã¯ãèæ ®ãããšããã©ãŒã¯ã¯ç¢ºãã«ç¹å®ã®åœ¢ã®ã³ã³ãããŒã¿ãšèŠãªãããšãã§ããŸããã³ã³ãããŒã¿ã¯ãé¢æ°åããã°ã©ã ã«ãããé¢æ°ããªãã¬ãŒã·ã§ã³ã®çµã¿åãããå©ããããã®é«éé¢æ°ã§ãããä»ã®é¢æ°ãåŒæ°ãšããŠåããæ°ããé¢æ°ãçµæãšããŠè¿ããã®ãæããŸãã
Jèšèªã®ãã©ãŒã¯ã¯ã3ã€ã®é¢æ°ïŒãŸãã¯åè©ïŒãåããããããç¹å®ã®æ¹æ³ã§çµã¿åãããŠæ°ããé¢æ°ã圢æããŸãããã®èŠ³ç¹ããããã©ãŒã¯ã¯é¢æ°ãçµã¿åãããç¹å®ã®ã¿ã€ãã®ã³ã³ãããŒã¿ãšèŠãªãããšãã§ããŸãã
ãããã"ã³ã³ãããŒã¿"ãšããçšèªã¯ãé¢æ°åããã°ã©ã èšèªãçè«ã«ãããŠç¹å®ã®æŽå²çããã³æè¡çèæ¯ãæã€ãããJèšèªã®æèãšå®å šã«äžèŽããããã§ã¯ãããŸãããããããæœè±¡çã«ãé¢æ°ã®çµã¿åãããå©ãããã®ãšããŠã®ãã©ãŒã¯ã¯ã³ã³ãããŒã¿ã®äžçš®ãšèŠãªãããšãã§ããã§ãããã
3ã€ã®é¢æ°ãåæããã³ã³ãããŒã¿ã«ã€ããŠã¯ãäŒçµ±çãªã³ã³ãããŒã¿è«çã®äžã§ã¯ç¹å®ãããŠããŸãããããããé¢æ°åèšèªãã©ã€ãã©ãªã§ã¯ãé«éé¢æ°ãã³ã³ãããŒã¿ãèªåã§å®çŸ©ããèœåãããããã3ã€ã®é¢æ°ãåæãããããªåäœãæã€ã³ã³ãããŒã¿ãäœãããšãå¯èœã§ãã
äŸãšããŠãHaskellã§3ã€ã®é¢æ°ãåæããã³ã³ãããŒã¿ãèããŠã¿ãŸãããïŒ
combineThree :: (c -> d) -> (b -> c) -> (a -> b) -> a -> d
combineThree f g h = f . g . h
ãã®combineThreeé¢æ°ã¯ã3ã€ã®é¢æ°f, g, hãåŒæ°ã«åããããããåæããŠæ°ããé¢æ°ãè¿ããŸãã. ã¯Haskellã®é¢æ°åæãªãã¬ãŒã¿ã§ãã
ãã®ãããªåœ¢åŒã§ãä»»æã®é¢æ°åèšèªãã©ã€ãã©ãªã§èªåèªèº«ã®ã³ã³ãããŒã¿ãå®çŸ©ããç¹å®ã®ããŒãºã«åãããŠé¢æ°ãçµã¿åãããããšãã§ããŸãã