å°ãåãŸã§ãããŒã ã¯æ°ããããã°ã©ããŒãæåŸ
ããŠãã¢ãŒã©ã³ã玹ä»ããå¿
èŠããããŸããã åŠç¿ããã»ã¹ãã¹ããŒãã¢ããããããã«ãç§ã¯é·ãéãããã€ããŠãã
Erlang Programming Rules and Conventionsã®è³æã翻蚳ããããšã«ããŸããã ååãšããŠãããããã¹ã¯åžæ°ãšå
±æããããã®ã ãã®çŽ æŽãããèšèªãåŠã³ããããŸãã¯ãã§ã«äœ¿çšããŠãã人ã
ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã 翻蚳ã¯ç¡æã§ãããšããã«èšããªããã°ãªããªãã®ã§ãåŒ·ãæ¹å€ããªãã§ãã ããã
1.ç®ç
ãã®èšäºã§ã¯ãErlangã䜿çšããŠãœãããŠã§ã¢ãéçºããéã«èæ
®ãã¹ãããã€ãã®åŽé¢ããªã¹ãããŸãã
2.ã¢ãŒã©ã³ã®æ§é ãšçšèª
ãã¹ãŠã®Erlangãµãã·ã¹ãã ã¯ã¢ãžã¥ãŒã«ã«åå²ãããŠããŸãã ã¢ãžã¥ãŒã«ã¯ã颿°ãšå±æ§ã§æ§æãããŸãã
颿°ã¯ãå
éšã¢ãžã¥ãŒã«ãŸãã¯ãšã¯ã¹ããŒãããŠããµãŒãããŒãã£ã¢ãžã¥ãŒã«ã§äœ¿çšã§ããŸãã
屿§ã¯ã-ãã§å§ãŸããã¢ãžã¥ãŒã«ã®å
é ã«é
眮ãããŸãã
Erlangã¢ãŒããã¯ãã£ã§ã®ãã¹ãŠã®äœæ¥ã¯ã¹ã¬ããã«ãã£ãŠè¡ãããŸãã ã¹ã¬ããã¯ãããŸããŸãªã¢ãžã¥ãŒã«ã®é¢æ°åŒã³åºãã䜿çšã§ããäžé£ã®åœä»€ã§ãã ã¹ããªãŒã ã¯ãã¡ãã»ãŒãžãéä¿¡ããããšã§äºãã«å¯Ÿè©±ã§ããŸãã ãŸããåä¿¡æã«ãæåã«åŠçããå¿
èŠãããã¡ãã»ãŒãžãå€å¥ã§ããŸãã æ®ãã®ã¡ãã»ãŒãžã¯ã次ã®ç¶æ
ã«ãªããŸã§ãã¥ãŒã«æ®ããŸã
å¿
èŠã¯ãããŸããã
ã¹ããªãŒã ã¯ããªã³ã¯ïŒ
linkã³ãã³ãïŒãéããŠäºãã®äœæ¥ãç£èŠã§ããŸãã ã¹ã¬ããã®å®è¡ãçµäºãŸãã¯ãããããããšãé¢é£ãããã¹ãŠã®ã¹ã¬ããã«ä¿¡å·ãèªåçã«éä¿¡ãããŸãã
ã¹ã¬ããã®ãã®ã·ã°ãã«ã«å¯Ÿããããã©ã«ãã®å¿çã¯ãæäœãããã«çµäºããããšã§ãã
ãã ãããã®åäœã¯
trap_exitãã©ã°ãèšå®ããããšã§å€æŽã§ããŸãããã®ãã©ã°ã§ã¯ãã·ã°ãã«ãã¡ãã»ãŒãžã«å€æãããããã°ã©ã ã§åŠçã§ããŸãã
çŽç²ãªé¢æ°ã¯ãå€ãå
¥åããŒã¿ã®ã¿ã«äŸåããåŒã³åºãã®ã³ã³ããã¹ãã«äŸåããªã颿°ã§ãã ãã®åäœã«ããããããã¯éåžžã®æ°åŠçåäœã«äŒŒãŠããŸãã çŽç²ã§ãªã人ã¯ãå¯äœçšã®ããæ©èœãšèšãããŠããŸãã
颿°ã次ã®å Žåãéåžžãå¯äœçšãçºçããŸãã
- ã¡ãã»ãŒãžãéä¿¡ããŸã
- ã¡ãã»ãŒãžãåãå
¥ããŸã
- exitãåŒã³åºããŸã
- ã¹ããªãŒã ã®ç°å¢ã倿ŽããBIFãåŒã³åºããŸãïŒ get / 1 ã put / 2 ã erase / 1 ã process_flag / 2ãªã© ïŒ
3èšèšåå
3.1ã¢ãžã¥ãŒã«ããå¯èœãªéãå°ãªã颿°ããšã¯ã¹ããŒããã
ã¢ãžã¥ãŒã«ã¯ãErlangã®åºæ¬çãªæ§é åäœã§ãã èšå€§ãªæ°ã®æ©èœãå«ãŸããŠããå ŽåããããŸããããšã¯ã¹ããŒããªã¹ãã«å«ãŸããŠããæ©èœã®ã¿ããµãŒãããŒãã£ã¢ãžã¥ãŒã«ã§å©çšå¯èœã«ãªããŸãã
ã¢ãžã¥ãŒã«ã®è€éãã¯ããšã¯ã¹ããŒãããã颿°ã®æ°ã«äŸåããŸãã åæããŸããæ°ååããšã¯ã¹ããŒãããã¢ãžã¥ãŒã«ããããããã€ãã®é¢æ°ããšã¯ã¹ããŒãããã¢ãžã¥ãŒã«ãæ±ãæ¹ãç°¡åã§ãã
çµå±ããŠãŒã¶ãŒã¯ãšã¯ã¹ããŒãããããã®ã®ã¿ãçè§£ããå¿
èŠããããŸãã
ããã«ãã¢ãžã¥ãŒã«ã«ã¢ã¯ã»ã¹ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯å€æŽãããªããããã¢ãžã¥ãŒã«ã³ãŒãã«å䌎ãã人ã¯å
éšæ©èœã®å€æŽãå®å
šã«æããããšãã§ããŸãã
3.2ã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ãæžãããŠã¿ãŠãã ãã
éåžžã«å€ãã®ä»ã®ã¢ãžã¥ãŒã«ã«å¯ŸåŠããã¢ãžã¥ãŒã«ã¯ã倿Žããå Žåãã¡ã³ããã³ã¹ãã¯ããã«å°é£ã§ãã
ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããå Žåããã®ã¢ãžã¥ãŒã«ã䜿çšããå Žæã§ã³ãŒãã倿Žããå¿
èŠããããŸãã
çæ³çã«ã¯ãã¢ãžã¥ãŒã«åŒã³åºãã¯ã«ãŒãã䜿çšããã°ã©ãã§ã¯ãªãããªãŒã«ããå¿
èŠãããããšã«æ³šæããŠãã ããã ïŒç§ããããã®ããã
Wranglerãªãã¡ã¯ã¿ãªã³ã°ããŒã«ã«ã¯ã颿°åŒã³åºãã®ã°ã©ããæç»ã§ããGraphVizããŒã¹ã®äŸ¿å©ãªã¡ã«ããºã ããããŸãïŒ
ãã®çµæãã³ãŒã«ã³ãŒãã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã

ã§ã¯ãªãïŒ

3.3äžè¬çã«äœ¿çšãããã³ãŒãã®ã¿ãã©ã€ãã©ãªã«å
¥ããŸãã
ã©ã€ãã©ãªïŒã¢ãžã¥ãŒã«ïŒã§ã¯ãé¢é£ãã颿°ã®ã¿ã®ã»ããã«ããå¿
èŠããããŸãã
éçºè
ã®ã¿ã¹ã¯ã¯ãåãã¿ã€ãã®é¢æ°ãå«ãã©ã€ãã©ãªãäœæããããšã§ãã
ãããã£ãŠãããšãã°ã
ãªã¹ããæäœããããã®ã³ãŒããå«ã
ãªã¹ãã©ã€ãã©ãªã¯åªããã¢ãŒããã¯ãã£ã®äŸã§ããããªã¹ããæäœããããã®ã³ãŒããšæ°åŠçã¢ã«ãŽãªãºã ã®äž¡æ¹ãå«ã
lists_and_methodã¯æªãäŸã§ãã
ãšããããã©ã€ãã©ãªå
ã®ãã¹ãŠã®é¢æ°ã«å¯äœçšãå«ãŸããŠããªãå Žåã ãã®åŸãç°¡åã«åå©çšã§ããŸãã
3.4ããããã³ã°ããšãããŒãã£ã³ãŒãããå¥ã
ã®ã¢ãžã¥ãŒã«ã«åé¢ãã
å€ãã®å Žåãåé¡ã解決ããã«ã¯ããã¯ãªãŒã³ãã³ãŒããšãããŒãã£ãã³ãŒãã䜿çšããå¿
èŠããããŸãã
ãã®ãããªã»ã¯ã·ã§ã³ãç°ãªãã¢ãžã¥ãŒã«ã«åããŸãã
ããšãã°ããããŒãã£ã³ãŒããïŒ
- ããã»ã¹èŸæžã䜿çš
- erlangïŒprocess_info / 1ã䜿çšããŠãé©åãªç®çã§ã¯ãããŸãã:)
- åœåã¯æåŸ
ããŠããªãã£ãããšãè¡ããŸããã
ã§ããã ãããããªã³ãŒããäœæãããããŒãã£ããªã³ãŒããäœæããæåã¯ã§ããã ã䜿çšããªãã§ãã ãããæ¬¡ã«ãèãããããã¹ãŠã®å¯äœçšãšäœ¿çšäžã®åé¡ãææžåããŸãã
3.5åŒã³åºãå
ã®é¢æ°ãçµæãã©ã®ããã«äœ¿çšãããã«ã€ããŠèããªãã§ãã ãã
åŒã³åºãå
ã®é¢æ°ãããªãã®çµæãã©ã®ããã«äœ¿çšãããã«ã€ããŠèããªãã§ãã ããã
ããšãã°ã
ã«ãŒã颿°ãåŒã³åºããŠãæ£ãããªãå¯èœæ§ã®ããåŒæ°ãæž¡ãããšããŸãã route颿°ã®äœæè
ã¯ãåŒæ°ãæ£ãããªãå Žåã«äœãããããèããã¹ãã§ã¯ãããŸããã
åæ§ã®ã³ãŒããæžãå¿
èŠã¯ãããŸããïŒ
do_something(Args) -> case check_args(Args) of ok -> {ok, do_it(Args)}; {error, What} -> String = format_the_error(What), io:format("* error:~s\n", [String]),
ãããè¡ãæ¹ãè¯ãã§ãïŒ
do_something(Args) -> case check_args(Args) of ok -> {ok, do_it(Args)}; {error, What} -> {error, What} end. error_report({error, What}) -> format_the_error(What).
åè
ã®å Žåããšã©ãŒã¯åžžã«ã³ã³ãœãŒã«ã«è¡šç€ºãããåŸè
ã®å Žåããšã©ãŒã®èª¬æãåã«è¿ãããŸãã ã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ããããã©ãåŠçããããèªåã§æ±ºããããšãã§ããŸãããããç¡èŠãããã
error_report / 1ã§å°å·ãã
ãŸã ã ãããã«ããã圌ã¯ãšã©ãŒãçºçããå Žåã®å¯ŸåŠæ¹æ³ãéžæããæš©å©ãä¿æããŸãã
3.6ã³ãŒãããžãã¯ããäžè¬çãªãã¿ãŒã³ãšåäœââãæœåºãã
ã³ãŒãå
ã§äœããã®åäœãç¹°ãè¿ãããå Žåã¯ãå¥ã®é¢æ°ãŸãã¯ã¢ãžã¥ãŒã«ã«åé¢ããããã«ããŠãã ããã ãããã£ãŠãããã°ã©ã å
šäœã«æ£ãã°ãè€æ°ã®ã³ããŒãããä¿å®ãã¯ããã«ç°¡åã«ãªããŸãã
ãã³ããŒïŒããŒã¹ããã䜿çšãããæ©èœã䜿çšããŠãã ããïŒ
3.7ãããããŠã³èšèš
ããã°ã©ã ãäžããäžã«èšèšããŸãã ããã«ãããããªããã£ã颿°ã«å°éãããŸã§ã³ãŒããåŸã
ã«æ¹è¯ã§ããŸãã ãã®æ¹æ³ã§èšè¿°ãããã³ãŒãã¯ãããŒã¿ã®è¡šç€ºã«äŸåããŸãããããã¯ãããé«ãã¬ãã«ã§éçºããŠãããšãã«ã¯è¡šç€ºããŸã ããããªãããã§ãã
3.8ã³ãŒããæé©åããå¿
èŠã¯ãããŸãã
éçºã®åææ®µéã§ã³ãŒããæé©åããªãã§ãã ããã ãŸããæ£åžžã«æ©èœããããã«ããå¿
èŠãªå Žåã«ã®ã¿æé©åãè¡ããŸãã
3.9äºæž¬å¯èœãªã³ãŒããæžã
颿°ã®çµæã¯ããŠãŒã¶ãŒãé©ãããã¹ãã§ã¯ãããŸããã åæ§ã®ã¢ã¯ã·ã§ã³ãå®è¡ãã颿°ã¯ãåãããã«èŠããããå°ãªããšãé¡äŒŒããŠããå¿
èŠããããŸãã ãŠãŒã¶ãŒã¯ã颿°ãè¿ããã®ãäºæž¬ã§ããå¿
èŠããããŸãã å®è¡çµæãæåŸ
ã©ããã§ãªãå Žåã颿°åãç®çã«äžèŽããªããã颿°ã³ãŒãèªäœãæ£ããæ©èœããŸããã
3.10å¯äœçšãåé¿ããã
Erlangã«ã¯ãå¯äœçšã®ããããªããã£ããããã€ããããŸãã ãããã䜿çšãã颿°ã¯ãç°å¢ã«äŸåããŠãããããã°ã©ãã¯åŒã³åºãåã«ã¹ããªãŒã ã®ç¶æ
ãå¶åŸ¡ããå¿
èŠããããããåå©çšããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã
å¯äœçšãªãã§å¯èœãªéãå€ãã®ã³ãŒããèšè¿°ããŸãã
éçŽç²é¢æ°ã䜿çšããå Žåã«èµ·ãããããã¹ãŠã®åé¡ãæç¢ºã«ææžåããŸãã ããã«ããããã¹ããšãµããŒãã®èšè¿°ã倧å¹
ã«å®¹æã«ãªããŸãã
3.11å
éšããŒã¿ãã¢ãžã¥ãŒã«ããåºãããšãèš±å¯ããªã
äŸã§èª¬æããã®ãæãç°¡åã§ãã ãã¥ãŒç®¡çæ©èœããããšããŸãïŒ
-module(queue). -export([add/2, fetch/1]). add(Item, Q) -> lists:append(Q, [Item]). fetch([H|T]) -> {ok, H, T}; fetch([]) -> empty.
圌女ã¯ãã¥ãŒããªã¹ããšããŠèª¬æããŸãã ãããŠããã®ãããªãã®ã䜿çšããŸããïŒ
NewQ = [],
ããããããã€ãã®åé¡ãçºçããŸãã
- ãã¥ãŒããªã¹ãã§ããããšãç¥ãå¿
èŠããããŸã
- å°æ¥ããã¥ãŒãå¥ã®ãã¥ãŒã«å€æŽããããšã¯ã§ããŸããïŒããšãã°ãæé©åãå¿
èŠãªå ŽåïŒ
ãã®ããã«æžãæ¹ãã¯ããã«è¯ãã§ãïŒ
-module(queue). -export([new/0, add/2, fetch/1]). new() -> []. add(Item, Q) -> lists:append(Q, [Item]). fetch([H|T]) -> {ok, H, T}; fetch([]) -> empty.
ããã§äœ¿ç𿹿³ã¯æ¬¡ã®ããã«ãªããŸãã
NewQ = queue:new(), Queue1 = queue:add(joe, NewQ), Queue2 = queue:add(mike, Queue1), âŠ
ãã®ã³ãŒãã«ã¯ãäžèšã®æ¬ ç¹ããããŸããã
ããã§ããã¥ãŒã®é·ããç¥ãå¿
èŠããããšããŸãã ãŠãŒã¶ãŒããã¥ãŒããªã¹ãã§ããããšãç¥ã£ãŠããå Žåãæ¬¡ã®ããã«èšè¿°ããŸãã
Len = length(Queue)
ç¹°ãè¿ããŸãããåé¡ã¯ããŠãŒã¶ãŒãå®è£
ããã¥ãŒã«å³å¯ã«é¢é£ä»ããŠããããããã®ãããªã³ãŒãã¯ç¶æããã³èªã¿åããå°é£ã§ãã ãã®å Žåãå¥ã®é¢æ°ãæäŸããŠã¢ãžã¥ãŒã«ã«è¿œå ããããšããå§ãããŸãã
-module(queue). -export([new/0, add/2, fetch/1, len/1]). new() -> []. add(Item, Q) -> lists:append(Q, [Item]). fetch([H|T]) -> {ok, H, T}; fetch([]) -> empty. len(Q) -> length(Q).
ããã§ããŠãŒã¶ãŒã¯èªåã®ã³ãŒãã®ä»£ããã«
queueïŒlenïŒQueueïŒãåŒã³åºãããšãã§ããŸãã
ãã®ã³ãŒãã§ã¯ãããŒã¿åãã¥ãŒã®å®è£
ã®è©³çްãããæœè±¡åãããŸããã ã€ãŸã ã€ãŸãããã¥ãŒã¯ãæœè±¡ããŒã¿åãã«ãªããŸããã
ãªãã§ãããªé¢åãªã®ïŒ å®éã«ã¯ãå
éšè¡šçŸã眮ãæããããã®ç°¡åãªã¡ã«ããºã ã§ããããšã倿ãããŠãŒã¶ãŒã³ãŒããšã®åŸæ¹äºææ§ãæãªãããšãæããããšãªããã¢ãžã¥ãŒã«ã®å®è£
ã倿Žã§ããããã«ãªããŸããã ããšãã°ãå®è£
ãæ¹åããããã«ãã³ãŒãã¯æ¬¡ã®ããã«æžãçŽãããŸãã
-module(queue). -export([new/0, add/2, fetch/1, len/1]). new() -> {[],[]}. add(Item, {X,Y}) ->
3.12ã³ãŒããã§ããã ãæ±ºå®çã«ãã
確å®çããã°ã©ã ã¯ãå®è¡ãããåæ°ã«é¢ä¿ãªãåžžã«åãããã«åäœããŸãã éæ±ºå®çãªãã®ã¯ãéå§ããšã«ç°ãªãåäœãããå¯èœæ§ããããŸãã æåã®ãªãã·ã§ã³ã¯ãããã°ãã¯ããã«ç°¡åã§ãããå€ãã®ãšã©ãŒã远跡ããŠåé¿ã§ãããããããã«åºå·ããããã«ããŠãã ããã
ããšãã°ãããã°ã©ã ã¯5ã€ã®ç°ãªãã¹ã¬ãããéå§ããããããéå§ããããšã確èªããå¿
èŠããããŸããéå§ã®é åºã¯éèŠã§ã¯ãããŸããã
5ã€ãã¹ãŠãäžåºŠã«éå§ããŠãããã§ãã¯ããããšãã§ããŸãããã¹ã¬ãããéå§ããããã©ããã確èªãããã³ã«ã次ã®ã¹ã¬ãããéå§ããããã«é çªã«éå§ããããšããå§ãããŸãã
3.13å
¥åããŒã¿ã®æ£ç¢ºæ§ãåžžã«ç¢ºèªããå¿
èŠã¯ãããŸãã
å€ãã®å Žåãããã°ã©ãã¯ãéçºäžã®ã·ã¹ãã ã®äžéšã«å¯Ÿããå
¥åãä¿¡é ŒããŸããã ã»ãšãã©ã®ã³ãŒãã¯ãéä¿¡ãããããŒã¿ã®æ£ç¢ºããæ°ã«ããå¿
èŠã¯ãããŸããã æ€èšŒã¯ãããŒã¿ãå€éšã«éä¿¡ãããå Žåã«ã®ã¿çºçããå¿
èŠããããŸãã
äŸïŒ
Optionã
normallãŸãã¯
allã§ãªãå Žåã颿°ã¯å€±æã
ãŸã ã ããã§ãããïŒ ãã®é¢æ°ãåŒã³åºã人ã¯ãæž¡ããããã®ãå¶åŸ¡ããå¿
èŠããããŸãã
3.14ããŒããŠã§ã¢ããžãã¯ããã©ã€ããŒã«åé¢ãã
ãã©ã€ãã䜿çšããŠãæ©åšãã·ã¹ãã ããéé¢ããå¿
èŠããããŸãã ãã©ã€ããŒã®ã¿ã¹ã¯ã¯ãã·ã¹ãã å
ã®ããŒããŠã§ã¢ãåãªãErlangã¹ããªãŒã ã§ãããã®ããã«æç€ºããããšã§ããããã¯ãåçŽãªã¹ããªãŒã ã®ããã«ãã¡ãã»ãŒãžãéåä¿¡ãããšã©ãŒã«å¿çããŸãã
3.15åãæ©èœã§å
ã«æ»ãã¢ã¯ã·ã§ã³
ãã¡ã€ã«ãéããããã䜿ã£ãŠäœããå®è¡ããŠããéããã³ãŒãããããšããŸãã
do_something_with(File) -> case file:open(File, read) of, {ok, Stream} -> doit(Stream), file:close(Stream)
ãã¡ã€ã«ã®ãªãŒãã³ãšã¯ããŒãºã¯åãæ©èœã§çºçããããšã«æ³šæããŠãã ããã ã³ãŒãã¯èªã¿ããããçè§£ããããã§ãã ããããããšãã°ããã®ãããªã³ãŒãã¯çè§£ããã®ãé£ããããã¡ã€ã«ãéãããããšãã«ããã«ã¯æç¢ºã§ã¯ãããŸããã
do_something_with(File) -> case file:open(File, read) of, {ok, Stream} -> doit(Stream) Error -> Error end. doit(Stream) -> ...., func234(...,Stream,...). ... func234(..., Stream, ...) -> ..., file:close(Stream)
4ãšã©ãŒåŠç
4.1éåžžã®ã³ãŒãããåŠçãåé¢ãã
éåžžã®ã³ãŒããšãšã©ãŒåŠçã³ãŒããæ··åšãããªãã§ãã ããã éåžžã®åäœãããã°ã©ã ããå¿
èŠããããŸãã åé¡ãçºçããå Žåãããã»ã¹ã¯ããã«ãšã©ãŒã§çµäºããŸãã ãšã©ãŒãä¿®æ£ããŠç¶è¡ããããšããªãã§ãã ããã ãšã©ãŒåŠçã«ã¯å¥ã®ããã»ã¹ãå¿
èŠã§ãã
4.2ãã³ã¢ãšã©ãŒãã匷調衚瀺ãã
éçºã®æ®µéã®1ã€ã¯ãã·ã¹ãã ã®ã©ã®éšåãåžžã«ãšã©ãŒãªãã§æ©èœããã©ã®ãšã©ãŒã蚱容ãããããæ±ºå®ããããšã§ãã
ããšãã°ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯ãã«ãŒãã«ã¯ãšã©ãŒãªãã§æ©èœããå¿
èŠããããŸãããéåžžã®ã¢ããªã±ãŒã·ã§ã³ã¯ãšã©ãŒã§ã¯ã©ãã·ã¥ããå¯èœæ§ããããŸãããããã¯ã·ã¹ãã å
šäœã®æ©èœã«ã¯åœ±é¿ããŸããã
åžžã«æ£ããåäœããã¯ãã®éšåãããšã©ãŒã®ã«ãŒãã«ããšåŒã³ãŸãã ãã®éšåã¯ãååãšããŠãããŒã¿ããŒã¹ãŸãã¯ãã£ã¹ã¯ã«äžéç¶æ
ãç¶ç¶çã«ä¿åããŸãã
5ã¹ããªãŒã ããµãŒããŒãã¡ãã»ãŒãž
5.1 1ã€ã®ã¢ãžã¥ãŒã«ã«ãã¹ãŠã®ã¹ããªãŒã ã³ãŒããå®è£
ãã
ãã¡ãããã¹ã¬ããã¯ä»ã®ã¢ãžã¥ãŒã«ãã颿°ãåŒã³åºãããšãçè§£ããå¿
èŠããããŸãããããã§ã¯ãã¹ã¬ããã®ã¡ã€ã³ã«ãŒããè€æ°ã®ã¢ãžã¥ãŒã«ã«åå²ãããŠã¯ãªããã1ã€ã®ã¢ãžã¥ãŒã«å
ã«ããã¹ãã§ãããšããäºå®ã«ã€ããŠè©±ããŸãã ããããªããšãé²è¡ãå¶åŸ¡ããã®ãé£ãããªããŸãã ããã¯ã
æ±çšã©ã€ãã©ãªã䜿çšããªãããšãæå³ãããã®ã§ããããŸããã ãããã¯ããããŒã®æŽçã«åœ¹ç«ã€ããã«èšèšãããŠããŸãã
ãŸããããã€ãã®ã¹ã¬ããã«å
±éã®ã³ãŒãã¯ãå®å
šã«ç¬ç«ããã¢ãžã¥ãŒã«ã«å®è£
ããå¿
èŠãããããšãå¿ããªãã§ãã ããã
5.2ã¹ã¬ããã䜿çšããŠã·ã¹ãã ãæ§ç¯ãã
ã¹ããªãŒã ã¯ãã·ã¹ãã ã®åºæ¬çãªæ§é èŠçŽ ã§ãã ãã ããåã«é¢æ°ãåŒã³åºãããšãå¯èœãªå Žåã¯ããããã䜿çšããŠã¡ãã»ãŒãžãéä¿¡ããªãã§ãã ããã
5.3ç»é²æžã¿ã¹ããªãŒã
ã¹ããªãŒã ã¯ãã³ãŒããå«ãã¢ãžã¥ãŒã«ã®ååãšåãååã§ç»é²ããå¿
èŠããããŸãã ããã«ããããµããŒãã倧å¹
ã«ä¿é²ãããŸãã é·æé䜿çšããäºå®ã®ã¹ããªãŒã ã®ã¿ãç»é²ããŸãã
5.4ç©ççã«äžŠåãªã¢ã¯ã·ã§ã³ããšã«ã·ã¹ãã ã«ã¹ã¬ããã1ã€ã ãäœæããŸã
ã¹ã¬ããã䜿çšããããåé¡ãé çªã«è§£æ±ºãããã¯ã解決ããããšããŠããåé¡ã«çŽæ¥äŸåããŸãã ãã ãã1ã€ã®äž»ãªã«ãŒã«ã«æ²¿ã£ãŠã¬ã€ãããããšããå§ãããŸãã
ãå®äžçã®äžŠåããã»ã¹ããšã«1ã€ã®ã¹ã¬ããã䜿çšããŸããã
ãã®èŠåã«åŸãã°ãããã°ã©ã ããžãã¯ã¯çè§£ãããããªããŸãã
5.5åã¹ã¬ããã«ã¯1ã€ã®ãããŒã«ãã®ã¿ãå¿
èŠã§ã
ã¹ããªãŒã ã¯ã·ã¹ãã å
ã§ããŸããŸãªåœ¹å²ãæããããšãã§ããŸãã ããšãã°ãã¯ã©ã€ã¢ã³ã/ãµãŒããŒã¢ãŒããã¯ãã£ã§ã¯ãã¹ã¬ããã¯ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ã«ãªãããšãã§ããŸããã2ã€ã®åœ¹å²ã2ã€ã®ã¹ã¬ããã«åããããšããå§ãããŸãã
ãã®ä»ã®åœ¹å²ïŒ
- ã¹ãŒããŒãã€ã¶ãŒïŒ Supervisor ïŒ -ãããŒãç£èŠããèœäžåŸã«ãããŒãåèµ·åããŸãã
- workerïŒ worker ïŒ -ãšã©ãŒãçºçããå¯èœæ§ã®ããéåžžã®å®è¡ã¹ããªãŒã ã
- ä¿¡é Œã§ããã¹ã¬ããïŒãŸãã¯ã·ã¹ãã ã ä¿¡é Œã§ããã¯ãŒã«ãŒ ïŒ -ãšã©ãŒãçºçããŠã¯ãªããªãã¹ã¬ããã
5.6 æ±çšæ©èœã䜿çšããŠãµãŒããŒãäœæããå¯èœãªéããããã³ã«ãæäœãã
ã»ãšãã©ã®å Žåã
gen_serverã䜿çšããŠãµãŒããŒãäœæããã®ãæè¯ã®ãœãªã¥ãŒã·ã§ã³ã§ããã·ã¹ãã ã®æ§é ã倧å¹
ã«ä¿é²ããããã§ãã ããã¯ãããŒã¿è»¢éãããã³ã«ã®åŠçã«ãåœãŠã¯ãŸããŸãã
5.7ã¡ãã»ãŒãžãžã®ã¿ã°ã®è¿œå
ãã¹ãŠã®ã¡ãã»ãŒãžã«ã¯ã¿ã°ãå¿
èŠã§ãã ã¿ã°ä»ãã¡ãã»ãŒãžã¯ã
åä¿¡ãããã¯ã§ã®é åºã¯éèŠã§ã¯ãªããæ°ããã¡ãã»ãŒãžã®ãµããŒãã远å ããæ¹ãç°¡åã§ããããã管çãç°¡åã§ãã
ãã®ãããªã³ãŒããæžãã¹ãã§ã¯ãããŸããïŒ
loop(State) -> receive ... {Mod, Funcs, Args} ->
ã¡ãã»ãŒãžåŠç
{get_status_infoãFromãOption}ã远å ã
ããã®åŠçãæåã®ãããã¯ã®äžã«é
眮ããå¿
èŠãçããå Žåãç«¶åãçºçããæ°ããã³ãŒãã¯å®è¡ãããŸããã
ã¡ãã»ãŒãžãåæã®å Žåãçµæã«ãã¿ã°ãä»ããå¿
èŠããããŸããããªã¯ãšã¹ããšã¯ç°ãªããŸãã äŸïŒã¿ã°
get_status_infoã§ãªã¯ãšã¹ãããå Žåãå¿ç
status_infoãæ¥ãã¯ãã§ãã ãã®ã«ãŒã«ã«æºæ ãããšããããã°ãéåžžã«å®¹æã«ãªããŸãã
æ£ããã³ãŒãã®äŸã次ã«ç€ºããŸãã
loop(State) -> receive ... {execute, Mod, Funcs, Args} ->
5.8ã³ãŒãã«äžæãªã¡ãã»ãŒãžã®ãã¥ãŒãã¯ãªã¢ãã
ãã¥ãŒãªãŒããŒãããŒãåé¿ããããã«ãåãµãŒããŒã¯ãããšãã°æ¬¡ã®ããã«ãçä¿¡ãããã¹ãŠã®ã¡ãã»ãŒãžãåŠçããå¿
èŠããããŸãã
main_loop() -> receive {msg1, Msg1} -> ..., main_loop(); {msg2, Msg2} -> ..., main_loop(); Other ->
5.9ãµãŒããŒã®äœææã«æ«å°Ÿååž°ã䜿çšãã
ã¡ã¢ãªãªãŒããŒãããŒãåé¿ããã«ã¯ããã¹ãŠã®ãµãŒããŒãæ«å°Ÿååž°ã䜿çšããŠå®è£
ããå¿
èŠããããŸãã
次ã®ããã«æžãã¹ãã§ã¯ãããŸããïŒ
loop() -> receive {msg1, Msg1} -> ..., loop(); stop -> true; Other -> error_logger:log({error, {process_got_other, self(), Other}}), loop() end, io:format("Server going down").
ãã®ããã«è¯ãïŒ
loop() -> receive {msg1, Msg1} -> ..., loop(); stop -> io:format("Server going down"); Other -> error_logger:log({error, {process_got_other, self(), Other}}), loop() end.
5.10ãµãŒããŒãžã®ã¢ã¯ã»ã¹ã€ã³ã¿ãŒãã§ã€ã¹ãäœæãã
å¯èœãªéãã¡ãã»ãŒãžãçŽæ¥éä¿¡ããã®ã§ã¯ãªãã颿°ã䜿çšããŠãµãŒããŒã«ã¢ã¯ã»ã¹ããŸãã
ã¡ãã»ãŒãžã³ã°ãããã³ã«ã¯å
éšæ
å ±ã§ãããä»ã®ã¢ãžã¥ãŒã«ã§ã¯äœ¿çšã§ããŸããã
äŸïŒ
-module(fileserver). -export([start/0, stop/0, open_file/1, ...]). open_file(FileName) -> fileserver ! {open_file_request, FileName}, receive {open_file_response, Result} -> Result end. ...<code>...
5.11ã¿ã€ã ã¢ãŠã
ã¡ãã»ãŒãžãåä¿¡ãããšãã«
afterã䜿çšããå Žåã¯ã现å¿ã®æ³šæãæã£ãŠãã ããã ã¿ã€ã ã¢ãŠãåŸã«ã¡ãã»ãŒãžãå°çããç¶æ³ã«ãªã£ãŠããããšã確èªããŠãã ããã ïŒ5.8ç¯ãåç
§ïŒã
5.12åºåä¿¡å·ã®åå
ã§ããã ãå°ãªãã¹ã¬ããã§
trap_exitãã©ã°ãèšå®ããå¿
èŠããããŸãã ããããããã䜿çšãããã©ããã¯ãã¢ãžã¥ãŒã«ã®ç®çã«äŸåããŸãã
6ã¢ãŒã©ã³ã³ãŒãã®æšå¥šäºé
6.1 ã¬ã³ãŒãã䜿çšããŠæ§é ãä¿åãã
ã¬ã³ãŒãããŒã¿åã¯ãå
éšErlangãã¥ãŒã®ã¿ã°ä»ãã¿ãã«ã§ãã 圌ã¯Erlang 4.3ã§åããŠç»å ŽããŸããã ã¬ã³ãŒãã¯ãCã®
æ§é äœãŸãã¯Pascalã®
ã¬ã³ãŒãã«éåžžã«äŒŒãŠããŸãã
ã¬ã³ãŒããè€æ°ã®ã¢ãžã¥ãŒã«ã§äœ¿çšãããäºå®ã®å Žåããã®å®çŸ©ã¯ããããŒãã¡ã€ã«ã«é
眮ããå¿
èŠããããŸãã
ã¬ã³ãŒã㯠ãã¢ãžã¥ãŒã«éã§ããŒã¿ã転éãããšãã«ã¢ãžã¥ãŒã«éã®äºææ§ã確ä¿ããããã«æé©ã«äœ¿çšãããŸãã
6.2ã»ã¬ã¯ã¿ãŒãšã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšãã
ã»ã¬ã¯ã¿ãŒãšã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠã
ã¬ã³ãŒããå¶åŸ¡ããŸãã
ã¬ã³ãŒããé èœãšããŠäœ¿çšããªãã§ãã ããã
äŸïŒ
demo() -> P = #person{name = "Joe", age = 29}, #person{name = Name1} = P,
次ã®ãããª
ã¬ã³ãŒãã䜿çšããªãã§ãã ããã
demo() -> P = #person{name = "Joe", age = 29}, {person, Name, _Age, _Phone, _Misc} = P.
6.3ã¿ã°ä»ã颿°ã®çµæãè¿ã
ãã®ããã«æžããªãã§ãã ããïŒ
keysearch(Key, [{Key, Value}|_Tail]) -> Value;
ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ã
{KeyãValue}ã«å€ãšããŠ
falseãå«ããããšã¯ã§ããŸããã æ£ããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
keysearch(Key, [{Key, Value}|_Tail]) -> {value, Value};
6.4ãã£ãããšã¹ããŒã«æ³šæããŠäœ¿çšãã
äœãããŠããã®ãããããªãå Žåã¯ã
catchãš
throwã䜿çšããªãã§ãã ããã
ãã£ããã¢ã³ã
ã¹ããŒã¯ãå€éšå
¥åããŒã¿ããŸãã¯è€éãªåŠçïŒããšãã°ãã³ã³ãã€ã©ãŒã«ããããã¹ãåŠçïŒãå¿
èŠãªããŒã¿ãåŠçãããšãã«åœ¹ç«ã¡ãŸãã
6.5ããã»ã¹èŸæžã®äœ¿çšã«ã¯çްå¿ã®æ³šæãæã£ãŠãã ãã
äœãããŠããã®ãããããªãå Žåã¯ã
getããã³
putã䜿çšããªãã§ãã ããã
putãš
getã䜿çšãã颿°ã¯ãå¥ã®åŒæ°ã远å ããããšã§ç°¡åã«æžãæããããšãã§ããŸãã
次ã®ããã«æžããªãã§ãã ããã
tokenize([H|T]) -> ...; tokenize([]) -> case get_characters_from_device(get(device)) of
ããè¯ãæžãæãïŒ
tokenize(_Device, [H|T]) -> ...; tokenize(Device, []) -> case get_characters_from_device(Device) of
putããã³
getã䜿çšãããšã颿°ãéæ±ºå®çã«ãªããŸãã ãã®å Žåããããã°ã¯ã¯ããã«è€éã§ãã 颿°ã®å®è¡çµæã¯ãå
¥åããŒã¿ã ãã§ãªããããã»ã¹ãã£ã¯ã·ã§ããªã«ãäŸåããŸãã ããã«ããšã©ãŒæã®ErlangïŒããšãã°ã
bad_match ïŒã¯ããã®æç¹ã§ã®ã¹ããªãŒã ãã£ã¯ã·ã§ããªã®ç¶æ
ã§ã¯ãªãã颿°åŒã³åºãã®åŒæ°ã®ã¿ã説æã«è¡šç€ºããŸãã
6.6 ã€ã³ããŒãã䜿çšããªã
ã€ã³ããŒãã³ãŒãã¯èªã¿ã«ããã§ãã ã¢ãžã¥ãŒã«é¢æ°ã®ãã¹ãŠã®å®çŸ©ã1ã€ã®ãã¡ã€ã«ã«ããæ¹ãè¯ãã§ãã
6.7颿°ã®ãšã¯ã¹ããŒã
颿°ããšã¯ã¹ããŒããããçç±ãåºå¥ããå¿
èŠããããŸãã
- ããããžã®å€éšã¢ã¯ã»ã¹ãæå¹ã«ããã«ã¯
- ãŠãŒã¶ãŒã«ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããã«ã¯
- ã¢ãžã¥ãŒã«èªäœããã®spawnãŸãã¯applyãä»ããåŒã³åºãã®å Žåã
ã°ã«ãŒã-exportããã³ãšã¯ã¹ããŒãã®çç±ã«ã€ããŠã³ã¡ã³ãããŸãã
7.ã³ãŒãã®æäœããã³åå¥èšèšã«é¢ããæšå¥šäºé
7.1æ·±ããã¹ããããã³ãŒããæžããªã
匷ããã¹ããããŠãããšã¯ãå€ãã®
case /
if /
receiveãããã¯ãä»ã®
ã±ãŒã¹ /
if /
receiveãããã¯ã«ãã¹ããããŠããã³ãŒããæããŸãã ãã¹ãã®ã¬ãã«ã2ã€ä»¥äžããã®ã¯æªã圢åŒãšèŠãªãããŸãã ãã®ãããªã³ãŒãã¯èªã¿ã«ããã§ãã ãã®ãããªã³ãŒããå°ããªé¢æ°ã«åå²ããããšããå§ãããŸãã
7.2倧ããããã¢ãžã¥ãŒã«ãæžããªãã§ãã ãã
ã¢ãžã¥ãŒã«ã«ã¯ã400è¡ãè¶
ããã³ãŒããå«ããªãã§ãã ããã ãã®ãããªã¢ãžã¥ãŒã«ãããã€ãã®å°ããªã¢ãžã¥ãŒã«ã«åå²ããããšããå§ãããŸãã
7.3é·ããã颿°ãæžããªã
颿°ã¯15ã20è¡ããé·ãããªãã§ãã ããã 1è¡ã ããæžããŠåé¡ã解決ããããšããªãã§ãã ããã
7.4 1è¡ã«å€ãã®æåãæžã蟌ãŸãªã
1è¡ã®æåæ°ã¯80ãè¶
ããŠã¯ãªããŸããïŒA4ã«åãŸãããã«ïŒã
Erlangã§ã¯ãã©ããã³ã°åŸã«å®£èšãããè¡ã¯èªåçã«äžç·ã«æ¥çãããŸãã
äŸïŒ
io:format("Name: ~s, Age: ~w, Phone: ~w ~n" "Dictionary: ~w.~n", [Name, Age, Phone, Dict])
7.5倿°ã®åœå
倿°ã®æ£ããïŒæå³ã®ããïŒååãéžæããã®ã¯éåžžã«é£ããäœæ¥ã§ãã
倿°åãè€æ°ã®åèªã§æ§æãããŠããå Žåã¯ã
ã_ãã§åºåããã
CamelCaseã䜿çšããããšãã
å§ãããŸã颿°å
ã®å€æ°ãç¡èŠããããã«
'_'ã䜿çšããªãã§ãã ãã;
'_'ã§å§ãŸã倿°ã®ååãããšãã°
_Nameãããé©åã«èšè¿°ããŠ
ãã ãã ã
7.6颿°ã®åœå
颿°ã®ååã¯ããã®ç®çãæç¢ºã«åæ ããå¿
èŠããããŸãã çµæã¯ãååã«åºã¥ããŠäºæž¬å¯èœã§ãªããã°ãªããŸããã æšæºé¢æ°ã®æšæºåïŒ
start ã
stop ã
init ã
main_loop ...ãªã©ïŒã䜿çšããŸãã
ç°ãªãã¢ãžã¥ãŒã«ã®é¢æ°ã§ãããåãç®çã§ãåãããã«åŒã³åºãå¿
èŠããããŸãïŒããšãã°ã
ModuleïŒmodule_infoïŒïŒ ïŒã
ééã£ã颿°åã®éžæã¯ãæãäžè¬çãªééãã§ãã
颿°åã®ããã€ãã®èŠåã«ããããã®éžæãã¯ããã«ç°¡åã«ãªããŸãã ããšãã°ãæ¥é èŸ
ãis_ãã¯ãå®è¡çµæã
trueãŸãã¯
falseã«ãªãããšã
æå³ã ãŸã ã
is_...() -> true | false check_...() -> {ok, ...} | {error, ...}
7.7ã¢ãžã¥ãŒã«ã®åœå
Erlangã«ã¯ãã©ããã¢ãžã¥ãŒã«ã®åœåã¢ãã«ããããŸãã ããšãã°ãJavaã®ãããªããã±ãŒãžã¯ãããŸããïŒæ£ç¢ºã«ã¯ãå®éã«ã¯ãããŸãããå®éã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¡ãªãããããå€ãã®åé¡ããããããŸãïŒã
éåžžãã¢ãžã¥ãŒã«ãäœããã®æ¹æ³ã§æ¥ç¶ãããŠããããšã瀺ãããã«ãåããã¬ãã£ãã¯ã¹ã䜿çšãããŸãã ããšãã°ãISDNã¯æ¬¡ã®ããã«å®è£
ãããŸãã
isdn_init
isdn_partb
isdn_ ...
7.8ã³ãŒãã®äžè²«æ§ãä¿ã€
çµ±äžãããã¹ã¿ã€ã«ã«ãããéçºè
ã¯äºãã®ã³ãŒããçè§£ãããããªããŸãã
ãã¹ãŠã®äººã
ã¯ãããŸããŸãªæ¹æ³ã§ã³ãŒããæžãããšã«æ
£ããŠããŸãã
ããšãã°ã誰ããã¹ããŒã¹ã§ã¿ãã«èŠçŽ ãå®çŸ©ããŸã
{12, 23, 45}
ãªãã®èª°ã
{12,23,45}
çµ±äžãããã¹ã¿ã€ã«ãèªåã§éçºããããããã«ãããå®ã£ãŠãã ããã
8ã³ãŒãã®ããã¥ã¡ã³ã
8.1ã³ãŒã屿§
ããããŒã®ã¢ãžã¥ãŒã«å±æ§ãåžžã«æ£ããèšå®ããå¿
èŠããããŸãã ãã®ã¢ãžã¥ãŒã«ã®ã¢ã€ãã¢ãã©ãããæ¥ãã®ãã説æããã³ãŒããå¥ã®ã¢ãžã¥ãŒã«ã§ã®äœæ¥ã®çµæãšããŠç»å Žããå Žåã¯ãããã説æããŠãã ããã
ã³ãŒããçãããšã¯ãããŸããã çé£ã¯ããœãŒã¹ãæå®ããã«ã³ãŒããã³ããŒããŠããŸãã
屿§ã®äŸïŒ
-revisionïŒ 'RevisionïŒ1.14'ïŒã
-createdïŒ 'DateïŒ1995/01/01 11:21:11'ïŒã
-created_byïŒ 'eklas @ erlang'ïŒã
-modifiedïŒ 'DateïŒ1995/01/05 13:04:07'ïŒã
-modified_byïŒ 'mbj @ erlang'ïŒã
8.2仿§ãžã®ãªã³ã¯ãæ®ã
ã³ãŒãã«äœããã®æšæºãå®è£
ãããŠããå Žåã¯ãããã¥ã¡ã³ããžã®ãªã³ã¯ïŒRFCãªã©ïŒãæ®ããŠãã ããã
8.3ãã¹ãŠã®ãšã©ãŒãææžåãã
ãã¹ãŠã®ãšã©ãŒã¯ãå¥åã®ææžã«æç¢ºã«èª¬æããå¿
èŠããããŸãã
è«ççãªãã®ãå¯èœãªå Žæã®ã³ãŒãã§ã
error_loggerãåŒã³åºã
ãŸã ã
error_logger ïŒerror_msgïŒ Format ã{ Descriptor ã Arg1 ã Arg2 ã....}ïŒ
ãŸãã{DescriptorãArg1ãArg2ã....}ããšã©ãŒã®èª¬æããã¥ã¡ã³ãã«èšèŒãããŠããããšã確èªããŠãã ããã8.4ã¡ãã»ãŒãžã§éä¿¡ããããã¹ãŠã®ã¿ã€ãã®ããŒã¿ãææžåãã
ã¿ã°ä»ãã¿ãã«ãã¹ããªãŒã ã«ãã£ãŠè»¢éãããã¡ãã»ãŒãžãšããŠäœ¿çšããŸãã䜿çšããŠã¬ã³ãŒããã¡ãã»ãŒãžã«ã¯ãç°ãªãã¢ãžã¥ãŒã«éã®äºææ§ãä¿èšŒããŸãããããã®ãã¹ãŠã®ããŒã¿åãã¡ãã»ãŒãžèšè¿°ææžã«ææžåããŸãã8.5ã³ã¡ã³ãã³ãŒã
ã³ã¡ã³ãã¯åé·ã§ãã£ãŠã¯ãªããŸããããã³ãŒããçè§£ããã«ã¯ååã§ãªããã°ãªããŸãããåžžã«ææ°ã®ç¶æ
ã«ä¿ã¡ãŸããã¢ãžã¥ãŒã«ã«é¢ããã³ã¡ã³ãã¯ã€ã³ãã³ãããã%%%ã§å§ãŸãå¿
èŠããããŸãã颿°ã«é¢ããã³ã¡ã³ãã¯ã€ã³ãã³ãããã%%ã§å§ãŸãå¿
èŠããããŸããã³ãŒãã«å¯Ÿããã³ã¡ã³ãã¯ããã®ããã«æŽåããïŒ
ã§å§ãŸãå¿
èŠããããŸãããã®ãããªã³ã¡ã³ãã¯ãã³ãŒãã®äžãŸãã¯ã³ãŒããšåãè¡ã«é
眮ããå¿
èŠããããŸããåãè¡ã«é
眮ããã®ããã奜ãŸããã§ãã%%颿°
some_useful_functionsïŒ UsefulArgugumentïŒ ->
another_functionsïŒ UsefulArgugumentïŒã«ã€ããŠã®ã³ã¡ã³ã
ãïŒ
è¡æ«ã®ã³ã¡ã³ãïŒ
åãã€ã³ãã³ãã¬ãã«
complex_stmntã§ã®complex_stmnt ã«ã€ããŠã®ã³ã¡ã³ãã
...
8.6åæ©èœã«é¢ããã³ã¡ã³ã
以äžãææžåããããšãéèŠã§ãã- ãã®æ©èœã®ç®ç
- æå¹ãªå
¥åãšãªã¢
- åºåãšãªã¢
- 颿°ãäœããã®ã¢ã«ãŽãªãºã ãå®è£
ããŠããå Žåããããèšè¿°ããŠãã ãã
- ãã®é¢æ°ã®ã¯ã©ãã·ã¥ã®å¯èœæ§ãåŒã³åºãã®ååšexit / 1ããã³throw / 1ããšã©ãŒã®å¯èœæ§ã
- å¯äœçš
äŸïŒ
%% ------------------------------------------------ ----------------------
%%æ©èœïŒget_server_statistics / 2
%%ç®çïŒããã»ã¹ããããŸããŸãªæ
å ±ãååŸããŸãã
%% ArgsïŒãªãã·ã§ã³ã¯éåžžã§ã| allã
%%æ»ãå€ïŒ{KeyãValue}
%%ãŸãã¯{errorãReason} ã®ãªã¹ãïŒããã»ã¹ã
忢ããŠããå ŽåïŒ%% --------------------- -------------------------------------------------
get_server_statisticsïŒ Optionã PidïŒ when pidïŒ PidïŒ ->
...
8.7ããŒã¿æ§é
ã¬ã³ãŒãã¯èª¬æãšãšãã«å®çŸ©ããå¿
èŠããããŸããäŸïŒ
%%ãã¡ã€ã«ïŒmy_data_structures.h
%% ----------------------------------------- ----------------------------
%%ããŒã¿åïŒperson
%%ããã§ïŒ
%% nameïŒæååïŒããã©ã«ãã¯æªå®çŸ©ïŒã
%% ageïŒæŽæ°ïŒããã©ã«ãã¯æªå®çŸ©ïŒã
%% phoneïŒæŽæ°ã®ãªã¹ãïŒããã©ã«ãã¯[]ïŒã
%% dictïŒå人ã«é¢ããããŸããŸãªæ
å ±ãå«ãèŸæžã
%% {KeyãValue}ãªã¹ãïŒããã©ã«ãã¯ç©ºã®ãªã¹ãã§ãïŒã
%% ------------------------------------------------ ----------------------
-ã¬ã³ãŒãïŒäººã{ååã幎霢ãé»è©± = []ãèŸæž = []}ïŒã
8.8ãã¡ã€ã«ããããŒãèäœæš©
åãã¡ã€ã«ã¯èäœæš©æ
å ±ã§å§ãŸãå¿
èŠããããŸãã äŸïŒ
%%% ----------------------------------------------- ----------------------
%%% Copyright Ericsson Telecom AB 1996
%%% %%%èäœ
æš©ææããã®ã³ã³ãã¥ãŒã¿ãŒããã°ã©ã ã®ãããªãéšåãã
䜿çšãè€è£œãæ€çŽ¢ã·ã¹ãã ãžã®ä¿åãéä¿¡ã
圢åŒãææ®µãåãããé»åçãæ©æ¢°çãã³ããŒã
èšé²ã%%%ããã以å€ã®å Žåã
%%% Ericsson Telecom ABã®äºåã®æžé¢ã«ããèš±å¯ãªãã
%%% ----------------------------------------------- ----------------------
8.9ãã¡ã€ã«ããããŒãããŒãžã§ã³å±¥æŽ
åãã¡ã€ã«ã«ã¯ã誰ãã©ã®ãããªå€æŽãäœã®ç®çã§è¡ã£ããã瀺ãããŒãžã§ã³å±¥æŽãå¿
èŠã§ãã%%%---------------------------------------------------------------------
%%% Revision History
%%%---------------------------------------------------------------------
%%% Rev PA1 Date 960230 Author Fred Bloggs (ETXXXXX)
%%% Intitial pre release. Functions for adding and deleting foobars
%%% are incomplete
%%%---------------------------------------------------------------------
%%% Rev A Date 960230 Author Johanna Johansson (ETXYYY)
%%% Added functions for adding and deleting foobars and changed
%%% data structures of foobars to allow for the needs of the Baz
%%% signalling system
%%%---------------------------------------------------------------------
8.10 ,
åãã¡ã€ã«ã¯ãã¢ãžã¥ãŒã«ã®ç®çã®ç°¡åãªèª¬æãšãšã¯ã¹ããŒãããã颿°ã®ãªã¹ãã§å§ãŸãå¿
èŠããããŸãã%%%---------------------------------------------------------------------
%%% Description module foobar_data_manipulation
%%%---------------------------------------------------------------------
%%% Foobars are the basic elements in the Baz signalling system. The
%%% functions below are for manipulating that data of foobars and for
%%% etc etc etc
%%%---------------------------------------------------------------------
%%% Exports
%%%---------------------------------------------------------------------
%%% create_foobar(Parent, Type)
%%% returns a new foobar object
%%% etc etc etc
%%%---------------------------------------------------------------------
ã³ãŒãã®äœ¿çšã«é¢ããåé¡ãèªèããŠããå ŽåããŸãã¯äœããäžå®å
šãªå Žåã¯ãããã§èª¬æããŠãã ãããããã¯ãã³ãŒããããã«ãµããŒãããã®ã«åœ¹ç«ã¡ãŸãã8.11å€ãã³ãŒãã«ã¯ã³ã¡ã³ãããªãã§ãã ãã-åé€ããŠãã ãã
å€ãã³ãŒããåé€ããããŒãžã§ã³ç®¡çã·ã¹ãã ã«èª¬æãæ®ããŸããCSVã圹ç«ã¡ãŸãã8.12ããŒãžã§ã³ç®¡çã·ã¹ãã ã®äœ¿çš
å€ããå°ãªããè€éãªãããžã§ã¯ãã¯ããŒãžã§ã³ç®¡çã䜿çšããå¿
èŠããããŸãïŒGitãSVNãªã©ïŒ9ããããééã
è€æ°ã®ããŒãžã«é¢æ°ãæžãå
¥ãåã«ãªã£ãã±ãŒã¹ãå€ã颿°ãæžã/ if / receiveã¿ã°ãªãã®é¢æ°ãæžã颿°åãæ©èœã®ç®çã«å¯Ÿå¿ããªã倿°ã®æªãååãããŒãå¿
èŠã§ãªãå Žåã®äœ¿çšããŒã¿æ§é ã®ééã£ãéžæïŒè¡šç€ºã®äžåïŒã³ã¡ã³ãã®äžè¶³ãŸãã¯ã³ã¡ã³ãã®æ¬ åŠã³ãŒãã€ã³ãã³ãã¯ããã«äœ¿çšããã / ååŸæªãå¶åŸ¡ã¡ãã»ãŒãžãã¥ãŒã10ããã¥ã¡ã³ã
ãã®ãããã¯ã§ã¯ããµããŒããšç®¡çã®ããã«ãããžã§ã¯ãã«å¿
èŠãªããã¥ã¡ã³ãã«ã€ããŠèª¬æããŸãã10.1ã¢ãžã¥ãŒã«ã®èª¬æ
ã¢ãžã¥ãŒã«ããšã«1ã€ã®ç« ãåã¢ãžã¥ãŒã«ã®èª¬æãšããšã¯ã¹ããŒããããã¹ãŠã®æ©èœã®èª¬æãå«ãŸããŠããå¿
èŠããããŸãã- çŽæ
- å
¥å説æ
- åºåã®èª¬æ
- èãããã䜿çšäžã®åé¡ãšexit / 1åŒã³åºãã
10.2ã¡ãã»ãŒãžã®èª¬æ
ã¢ãžã¥ãŒã«å
ã§ã®ã¿äœ¿çšãããã¡ãã»ãŒãžãé€ããã·ã¹ãã ã§äœ¿çšãããã¡ãã»ãŒãžã®èª¬æ10.3ã¹ã¬ããã®èª¬æ
ãã¹ãŠã®ç»é²æžã¿ã¹ããªãŒã ãšããããžã®ã€ã³ã¿ãŒãã§ãŒã¹ã®èª¬æãåçã«äœæããããã¹ãŠã®ã¹ããªãŒã ãšããããžã®ã€ã³ã¿ãŒãã§ã€ã¹ã®èª¬æã10.4ãšã©ãŒã®èª¬æ
èãããããã¹ãŠã®ã·ã¹ãã ãšã©ãŒã®èª¬æã