ä»»æã®èšèªã®ãã«ãã£ã³ã°ãããã¯ã¯ãäœæ¥ã«äœ¿çšã§ããåºæ¬ããŒã¿åã§ãã ããããç¥ãããšã§ããã®é¢æ°ãŸãã¯ãã®é¢æ°ãè¿ããã®å€æ°ãŸãã¯ãã®å€æ°ã«æ ŒçŽãããŠãããã®ãåžžã«ç解ã§ããŸãã ããŒã¿ã«å¯ŸããŠã©ã®ãããªã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸããã ãããããŒã¹ã§ãã ãããã£ãŠãããã¯ãŸãã«ãã®èšäºã§ç¹ã«æ³šç®ããããã®ã§ãããç¹ã«ãã€ããªããŒã¿ãæ±ãäŸã§ããããŸãã
ãã®è³æã¯äž»ã«ãErlang-eã§æžãå§ããã°ããã®äººããŸãã¯æžãå§ããã人ã察象ãšããŠããŸãã ããããç§ã¯èšèªã®ãã®åŽé¢ãå®å
šã«ã«ããŒããããšããã®ã§ããã®æç« ãããäžçŽã®èªè
ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
æåã®ææã¯3ã€ã®éšåã«åå²ããå¿
èŠããããŸããããã®åºæ¬çãªèšèªã§ã¯ãåºæ¬çãªçš®é¡ãäœæããæ¹æ³ãšãåçš®é¡ã®æ¶è²»ãªãœãŒã¹ãæ€èšããŸãã
ãšã³ããªãŒ
ãããããã«ã«ããé«ãããã®èšäºãããã«æ²èŒããæ©äŒãäžããŠãããGoogleã®ãã·ã¢èªErlangã¡ãŒãªã³ã°ãªã¹ãã®åå è
ã«æ·±ãæè¬ããããšæããŸãã
ãã¬ãŒã³ããŒã·ã§ã³äžã«ãErlangã®ã³ãã³ãã·ã§ã«ïŒã·ã§ã«ïŒãããµã³ãã«ãæäŸãããŸãã ãããã£ãŠãäœæ¥ã®ç°¡åãªååãåŠã¶å¿
èŠããããŸãã ã·ã§ã«å
ã®åã³ãã³ãã¯ã³ã³ãã§åºåãããŠããŸãã åæã«ãããã¯ãŸã£ããåé¡ã§ã¯ãªããã»ããã¯1è¡ãŸãã¯è€æ°è¡ã§äœæãããŸãã
1> X=1, Y = 2,
1> Z = 3,
1> S=4.
4
å
¥åã®å®äºãšå®è¡ã®éå§ãžã®ãã€ã³ã¿ã¯ããªãªãã§ãã ãã®å Žåãã·ã§ã«ã¯æåŸã®ã³ãã³ãã§è¿ãããå€ã衚瀺ããŸãã äžèšã®äŸã§ã¯ãå€æ°Sã®å€ãè¿ãããŸããéå§ããããã¹ãŠã®å€æ°ã®å€ã¯èšæ¶ãããErlangã§éå§ãããå€æ°ã®å€ãåå®çŸ©ã§ããªãããããªãŒããŒã©ã€ãããããšãããšãšã©ãŒã«ãªããŸãã
2> Z=2.
** exception error: no match of right hand side value 2
ãããã£ãŠãçŸåšã®äœæ¥ã»ãã·ã§ã³ã§ã·ã§ã«ãå€æ°ã®å€ããå¿ãããããã«ããå¿
èŠãããå Žåã¯ãfïŒïŒé¢æ°ã䜿çšã§ããŸãã åŒæ°ãªãã§åŒã³åºãããåæåããããã¹ãŠã®å€æ°ãåé€ããŸãã åŒæ°ãšããŠå€æ°åãæå®ãããšãããã ããåé€ãããŸãïŒå€æ°ã®ãªã¹ãã転éããããšã¯ã§ããŸããïŒïŒ
3> f(Z).
ok
4> X = 4.
** exception error: no match of right hand side value 4
5> f().
ok
6> X = 4. %,
4
çµäºããã«ã¯ãåã«haltïŒïŒãå
¥åããããCrtl + GãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãåŒã³åºããŠqãå
¥åããŸãïŒhã³ãã³ãã¯ãã«ãã衚瀺ããŸãïŒã ã·ã§ã«ã§ããžã¿ã«ããŒã¿ãåºåããå Žåããããã¯10é²æ°ã«å€æãããŸãã
æ瀺ãããŠããè³æã¯ãçŸåšææ°ã®ããŒãžã§ã³5.6.5ã«é¢é£ããŠããŸãã æååã®ãšã³ã³ãŒãã«ã¯ã
ISO-8859-1 ïŒLatin-1ïŒãšã³ã³ãŒãã䜿çšãããŸãã ãããã£ãŠããã¹ãŠã®æ°å€æåã³ãŒãã¯ãã®ãšã³ã³ãŒãããååŸãããŸãã ãšã³ã³ãŒãã®ååïŒã³ãŒã0ã127ïŒã¯
US-ASCIIã³ãŒãã«å¯Ÿå¿ããŠãããããã©ãã³ã¢ã«ãã¡ãããã«åé¡ã¯ãããŸããã
å
éšè¡šçŸã§ã¯Latin-1ãä»®æ³ãã·ã³ã®ãå€éšãã§äœ¿çšãããšããéçºè
ã®å£°æã«ãããããããããã¯ãã°ãã°å®å
šã«æçœã§ã¯ãããŸããã ããã¯ãErlangãã³ãŒãã®åœ¢åŒã§æåãéåä¿¡ããããã«çºçããŸãã ãã±ãŒã«ã端æ«ã«èšå®ãããŠããå Žåãã³ãŒãã¯èšå®ãããã³ãŒãããŒãžã«åºã¥ããŠè§£éãããå¯èœã§ããã°å°å·ãããæåã§è¡šç€ºãããŸãã SSHã»ãã·ã§ã³ã®äŸã次ã«ç€ºããŸãã
# setenv | grep LANG
LANG=
# erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> [255].
"\377"
2> halt().
# setenv LANG ru_RU.CP1251
# erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> [255].
""
ããã«ãLANGç°å¢å€æ°ã«ç€ºãããŠããããšã¯ãŸã£ããåé¡ã§ã¯ãããŸãããäž»ãªããšã¯ãã€ã³ã¹ããŒã«ããå¿
èŠããããšããããšã§ãã
1.åºæ¬ã¿ã€ã
èšèªã«ã¯å€ãã®åºæ¬çãªã¿ã€ãã¯ãããŸããã ãã®çªå·ïŒæŽæ°ãŸãã¯æµ®åå°æ°ç¹ïŒãã¢ãã ããã€ããªããŒã¿ããããæååãé¢æ°ãªããžã§ã¯ãïŒJavaScriptã«é¡äŒŒïŒãããŒãèå¥åãããã»ã¹èå¥åïŒã·ã¹ãã ã®ã¢ãŒã©ã³ã§ã¯ãªããããã»ã¹ã®ã¢ãŒã©ã³ïŒãã¿ãã«ããªã¹ãã ããã€ãã®ç䌌ã¿ã€ãããããŸãïŒwriteãbooleanãstringã ãã¹ãŠã®ããŒã¿åïŒå¿
ãããåºæ¬ã§ã¯ãªãïŒã¯çšèªãšåŒã°ããŸãã
1.1çªå·
2çš®é¡ã®æ°å€ããµããŒããããŠããŸãã æµ®åå°æ°ç¹æ°ïŒ
Float ïŒããã³æŽæ°ïŒ
Integer ïŒã äžè¬ã«åãå
¥ããããŠããæ°åã®è¡šèšåœ¢åŒã«å ããŠã2ã€ã®ç¹å®ã®è¡šèšæ³ããããŸãã
- $ char
charæåã®ASCIIã³ãŒãïŒãã±ãŒã«ã«äŸåïŒã - ããŒã¹ ïŒ å€
åºæ°è¡šèšã®æŽæ°å€ ãåºæ°ã¯2ã36ã®ç¯å²ã§ãã
äŸïŒ
1> 42.
42
2> $A.
65
3> $\ .
10
4> 2#101.
5
5> 16#1f.
31
6> 2.3.
2.3
7> 2.3e3.
2.3e3
8> 2.3e-3.
0.0023
9>$.
255
åºåã®æ°å€ã¯10é²æ°ã«å€æãããããšãæãåºããŠãã ããã
ã¡ã¢ãªã®æ¶è²»ãšå¶éã å
šäœã§1ã€ã®ãã·ã³ã¯ãŒãã䜿çšããŸããããã¯ã32ãããããã»ããµã§ã¯32ãã€ãã64ãããããã»ããµã§ã¯8ãã€ãã§ãã 倧ããªæŽæ°ã®å Žå1 ... Nãã·ã³ã¯ãŒãã ã¢ãŒããã¯ãã£ã«å¿ããŠãæµ®åå°æ°ç¹æ°ã¯ãããã4ããã³3ãã·ã³ã¯ãŒããå æããŸãã
1.2ãªã¹ã
ãªã¹ãïŒ
ãªã¹ã ïŒã䜿çšãããšãããŒã¿ã1ã€ã®æ§é ã«ã°ã«ãŒãåã§ããŸãã ãªã¹ãã¯è§æ¬åŒ§ã䜿çšããŠäœæããããªã¹ã
é
ç®ã¯ã³ã³ãã§åºåãããŸãã ãªã¹ãé
ç®ã¯ä»»æã®ã¿ã€ãã«ããããšãã§ããŸãã ãªã¹ãã®æåã®èŠçŽ ã¯
headãšåŒã°ããæ®ãã¯tailãšåŒã°ããŸãã
1> Var = 5.
5
2> [1,45, atom, Var,"string", $Z, 2#101].
[1,45,atom,5,"string",90,5]
3>List = [1, 9.2, 3], % 1, [9.2, 3]
3>List.
[1,9.2,3]
ãªã¹ãã®ãµã€ãºã¯ããªã¹ãå
ã®èŠçŽ ã®æ°ã«çãããªããŸãã äžèšã®äŸã§ã¯ã
Listå€æ°ã®å€ã¯ãªã¹ãã§ããããªã¹ãã®ãµã€ãºã¯3ã§ãã
ãªã¹ãã¯åçãªæ§é ã§ãã ãªã¹ãé
ç®ãè¿œå ããã³åé€ã§ããŸãã ä»®æ³ãã·ã³ã®å
éšã§ã¯ããªã¹ãã¯åäžãªã³ã¯ãªã¹ãã®æ§é ã§ãããç¹å®ã®åŠçæ©èœã課ããŸããããã®è©³çŽ°ã¯ä»¥äžã®ãšããã§ãã
ã¡ã¢ãªã®æ¶è²»ãšå¶éã åãªã¹ãã¢ã€ãã ã¯ã1ãã·ã³ã¯ãŒãïŒã¢ãŒããã¯ãã£ã«å¿ããŠ4ãŸãã¯8ãã€ãïŒ+ã¢ã€ãã ã«æ ŒçŽãããŠããããŒã¿ã®ãµã€ãºãå æããŸãã ãããã£ãŠã32ãããã¢ãŒããã¯ãã£ã§ã¯ã
Listå€æ°ã®å€ã¯ïŒ1 + 1ïŒ+ïŒ1 + 4ïŒ+ïŒ1 + 1ïŒ= 9ã¯ãŒããŸãã¯36ãã€ããå æããŸãã
1.3æåå
å®éãErlangã«ã¯è¡ïŒ
String ïŒã¯ãããŸããã ããã¯ããã䟿å©ãªåœ¢åŒ
ã§æŽæ°ã®
ãªã¹ããäœæã§ãã
æ§æç³è¡£ã§ãã ãã®ãªã¹ãã®åé
ç®ã¯ã察å¿ããæåã®ASCIIã³ãŒãã§ãã
1> "Surprise".
"Surprise"
2> [83,117,114,112,114,105,115,101].
"Surprise"
3> "".
""
4> [$,$,$,$,$,$].
""
5> [$, $, $, $, $, $, 1].
[241,242,240,238,234,224,1]
ãããã£ãŠãä»®æ³ãã·ã³ã¯ãã¢ã€ãã ã³ãŒããå°å·æåã«å€æã§ãããªã¹ããèŠããšããã®åã«è¡ãããããšãç解ããèšå·åœ¢åŒã§è¡šç€ºããŸãã ä»ã®å€ãã®èšèªãšã¯ç°ãªããErlangã®æååã¯äºéåŒçšç¬Šã䜿çšããŠäœæãããåäžã§ã¯ãããŸããã ããã¯ãã¢ãã ãåäžåŒçšç¬Šã䜿çšããŠäœæãããããã§ãã å¶åŸ¡æååã¯æååå
ã§èš±å¯ãããŸãïŒä»¥äžãåç
§ïŒã
ã¡ã¢ãªã®æ¶è²»ãšå¶éã ãªããªã è¡ã¯æŽæ°ã®ãªã¹ãã§ãããåæåã¯ãªã¹ãã®1ã€ã®èŠçŽ ã§ãããæåã¯8ãŸãã¯16ãã€ãïŒ2ãã·ã³ã¯ãŒãïŒããããŸãã
1.4ã¢ãã
Atomã¯åãªããªãã©ã«ã§ãã ä»ã®èšèªã®å®æ°ã®ãããªããžã¿ã«å€ãšé¢é£ä»ããããšã¯ã§ããŸããã ã¢ãã ã«ãã£ãŠè¿ãããå€ã¯ãã¢ãã èªäœã§ãã ã¢ãã ã¯å°æåã§å§ãŸããæ°åãã©ãã³æåãã¢ã³ããŒã¹ã³ã¢_ããŸãã¯@ç¬ã§æ§æããå¿
èŠããããŸãã ãã®å ŽåãåäžåŒçšç¬Šããçç¥ããããšãã§ããŸãã ä»ã®æåãããå ŽåãåäžåŒçšç¬Šã䜿çšããŠãã¬ãŒã åããå¿
èŠããããŸãã äºéåŒçšç¬Šã¯ãããã«ã¯é©ããŠããŸããã è¡ãå²ã¿ãŸãã
äŸïŒ
hello
phone_number
'Monday'
'phone number'
æååããã³åŒçšç¬Šã§å²ãŸããã¢ãã ã§ã¯ã次ã®ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã䜿çšã§ããŸãã
ã·ãŒã±ã³ã¹
| 説æ
|
\ b
| ãªã¿ãŒã³ïŒããã¯ã¹ããŒã¹ïŒ
|
\ d
| åé€ïŒåé€ïŒ
|
\ e
| ãšã¹ã±ãŒãïŒãšã¹ã±ãŒãïŒ
|
\ f
| ããŒãžãã£ãŒãïŒãã©ãŒã ãã£ãŒãïŒ
|
\
| æ¹è¡
|
\ r
| ãã£ãªããžãªã¿ãŒã³
|
\ s
| ã¹ããŒã¹
|
\ t
| æ°Žå¹³ã¿ãïŒã¿ãïŒ
|
\ v
| åçŽã¿ã
|
\ XYZã\ YZã\ Z
| 8é²æåã³ãŒã
|
\ ^ a ... \ ^ z \ ^ A ... \ ^ Z
| Ctrl + A ... Ctrl + Z
|
\ '
| äžéåŒçšç¬Š
|
\ "
| äºéåŒçšç¬Š
|
\\
| ããã¯ã¹ã©ãã·ã¥
|
åŒçšç¬Šã§å²ãŸããŠããªãã¢ãã ã®ååãäºçŽèªã«ããããšã¯ã§ããŸããã ãããã®åèªã¯æ¬¡ã®ãšããã§ãã
and and Band begin bnot bor bsl bsr bxor case catch cond div end fun not let or orelse query receive rem try when when xorã
ã¡ã¢ãªã®æ¶è²»ãšå¶éã 宣èšãããåã¢ãã ã¯äžæã§ããããã®ã·ã³ããªãã¯è¡šçŸã¯ã
ã¢ãã ããŒãã«ãšåŒã°ããä»®æ³ãã·ã³ã®å
éšæ§é ã«æ ŒçŽãã
ãŸã ã ã¢ãã ã¯4ãã€ããŸãã¯8ãã€ãïŒ1ãã·ã³ã¯ãŒãïŒãåãããã®ã·ã³ããªãã¯è¡šçŸãå«ãã¢ãã ããŒãã«ã®èŠçŽ ãžã®åãªããªã³ã¯ã§ãã ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¯ãAtomããŒãã«ãã¯ãªãŒã³ã¢ããããŸããã ããŒãã«èªäœãã¡ã¢ãªç©ºéãå æããŸãã 255æåã®ã¢ãã ã䜿çšã§ããŸããåèšã§1,048,576åã®ã¢ãã ã䜿çšã§ããŸãã ãããã£ãŠã255æåã®ã¢ãã ã¯255 * 2 + 1 * Nãã·ã³ã¯ãŒããå æããŸããNã¯ããã°ã©ã å
ã®ã¢ãã ãžã®åç
§ã®æ°ã§ãã
1.5ã¿ãã«
ã¿ãã«ã¯ãªã¹ãã®ãããªãã®ã§ãèŠçŽ ã®ã»ããã§æ§æãããŠããŸãã ãŸããèŠçŽ ã®æ°ãšåããµã€ãºã§ããããªã¹ããšã¯ç°ãªãããµã€ãºã¯åºå®ãããŠããŸãã ã¿ãã«ã¯äžæ¬åŒ§ã䜿çšããŠäœæããããã®èŠçŽ ã¯ä»»æã®ããŒã¿åã«ããããšãã§ããã¿ãã«ã¯ãã¹ãã§ããŸãã
1> {1,2ã2ïŒ110ãnã$ rã[1ã5]ã "abc"}ã
{1,2,6ãnã114ã[1,5]ã "abc"}
2>ç·= {ç·ã
2> {ååããAlexeyã}ã
2> {é«ãã{ã¡ãŒãã«ã1.86}}ã
2> {幎霢ã27}}ã
{ç·æ§ã{ååããAlexeyã}ã{é«ãã{ã¡ãŒãã«ã1.86}}ã{幎霢ã27}}
3> Man2 = {manã
3> {ååããIvanã}ã
3> {é«ãã{meterã1.80}}ã
3> {幎霢ã25}}ã
4> [ManãMan2]ã
[{manã{nameã "Alexey"}ã{heightã{meterã1.86}}ã{ageã27}}ã
{manã{nameã "Ivan"}ã{heightã{meterã1.8}}ã{ageã25}}]
5> {20ã100}ã
{20,100}ã
ã¿ãã«ã¯ãæ§é ã«ç¹å®ã®ããŒã¿ãå«ããã ãã§ãªããããããèšè¿°ããããšãã§ãããšããç¹ã§äŸ¿å©ã§ãã ããã¯ãåºå®ã¿ãã«ãšåæ§ã«ããã³ãã¬ãŒãã«éåžžã«å¹æçã«é©çšããããšãå¯èœã«ããŸãã æåã®èŠçŽ ã§ã¿ãã«ãäœæãããšãã¯ãã¿ãã«ã®æ¬è³ªãèšè¿°ããã¢ãã ãèšè¿°ããããšããå§ãããŸãã RDBMSãšã®é¡äŒŒæ§ãåŒãåºãå Žåããªã¹ãã¯ããŒãã«ã§ãããããŒãã«ã®åè¡ã¯ãªã¹ãã®èŠçŽ ã§ããããã®èŠçŽ ã«ããã¿ãã«ã¯å¯Ÿå¿ããåã®ç¹å®ã®ã¬ã³ãŒãã§ãã
ã¡ã¢ãªã®æ¶è²»ãšå¶éã ã¿ãã«ã¯2ãã·ã³ã¯ãŒã+ããŒã¿èªäœãä¿åããã®ã«å¿
èŠãªãµã€ãºãåããŸãã ããšãã°ã5è¡ç®ã®ã¿ãã«ã¯ã32ã¢ãŒããã¯ãã£ã§ïŒ2 + 1ïŒ+ïŒ2 + 1ïŒ= 6ãã·ã³ã¯ãŒããŸãã¯24ãã€ããå æããŸãã ã¿ãã«ã®èŠçŽ ã®æ倧æ°ã¯67 108 863ã§ãã
1.6èšé²
ã¬ã³ãŒãã¯å®éã«ã¯æ§æç³ã®å¥ã®äŸã§ãããå
éšè¡šçŸã®ã¿ãã«ãšããŠä¿åãããŸãã ã³ã³ãã€ã«æ®µéã®ã¬ã³ãŒãã¯ã¿ãã«ã«å€æããããããã·ã§ã«ã§ã¬ã³ãŒããçŽæ¥äœ¿çšããããšã¯ã§ããŸããã ãã ããrdïŒïŒé¢æ°ã䜿çšããŠã¬ã³ãŒãæ§é ã宣èšã§ããŸãïŒ1è¡ç®ïŒã ã¬ã³ãŒã宣èšã¯åžžã«2ã€ã®èŠçŽ ã§æ§æãããŸãã æåã®èŠçŽ ã¯ã
ã¬ã³ãŒãåãšåŒã°ããã¢ãã ã§ãªããã°ãªããŸããã 2çªç®ã¯åžžã«ã¿ãã«ã§ã空ã®å ŽåããããŸãããã®èŠçŽ ã¯
field_name - field_valueã®ãã¢ã§ããããã£ãŒã«ãåã¯ã¢ãã ã§ãããå€ã¯æå¹ãªã¿ã€ãïŒã¬ã³ãŒã11è¡ç®ãå«ãïŒã§ãªããã°ãªããŸããã
ã¬ã³ãŒãïŒè¡2ïŒã«åºã¥ããŠã¿ãã«ãäœæããããã®æŒç®åã¯ãã©ãã£ã¹ïŒã®åŸã«ã¬ã³ãŒãåãšãã£ãŒã«ãå€ãæã€ã¿ãã«ãç¶ããå Žåã«ãã£ãŠã¯ç©ºã§ãããã¬ã³ãŒãèšè¿°ã§å®£èšãããŠããªããã£ãŒã«ãåãæã€ããšã¯ãããŸããã
1> rd(person, {name = "", phone = [], address}).
person
2> #person{}.
#person{name = [],phone = [],address = undefined}
3> #person{phone=[1,2,3], name="Joi", address="Earth"}.
#person{name = "Joi",phone = [1,2,3],address = "Earth"}
ã¿ãã«ã«å¯Ÿããã¬ã³ãŒãã®å©ç¹ã¯ãèŠçŽ ã®åŠçããã£ãŒã«ãã®ååã«ãã£ãŠå®è¡ãããããšã§ãïŒååã¯ã¢ãã ã§ãªããã°ãªãããã¬ã³ãŒãã®èª¬æãè¡1ã§å®£èšããå¿
èŠããããŸãïŒã ãããã£ãŠãå²ãåœãŠã®é åºã¯éèŠã§ã¯ãããŸãããæåã®èŠçŽ ã«ååãé»è©±ããŸãã¯äœæãããããšãèŠããŠããå¿
èŠã¯ãããŸããã ãã£ãŒã«ãã®é åºãå€æŽããæ°ãããã£ãŒã«ããè¿œå ã§ããŸãã ãŸãã察å¿ãããã£ãŒã«ããæå®ãããŠããªãå Žåãããã©ã«ãå€ãå²ãåœãŠãããšãã§ããŸãã
4> rd(person, {name="Smit", phone}).
person
5> P = #person{}.
#person{name = "Smit",phone = undefined}
6> J = #person{phone = [1,2,3], name = "Joi"}.
#person{name = "Joi",phone = [1,2,3]}
7> P#person.name.
"Smit"
8> J#person.name.
"Joi
9> W = J#person{name="Will"}.
#person{name = "Will",phone = [1,2,3]}
ãšã³ããªãäœæãããšãã«ïŒè¡4ïŒãããã©ã«ãå€ãå®çŸ©ãããŠããªãå ŽåïŒãã£ãŒã«ãé»è©±ïŒããã®å€ã¯
æªå®çŸ©ã®ã¢ãã ãšçãããªããŸãã 7è¡ç®ãš8è¡ç®ã«èª¬æãããŠããæ§æã䜿çšããŠãã¬ã³ãŒãã䜿çšããŠäœæãããå€æ°ã®å€ã«ã¢ã¯ã»ã¹ã§ããŸããå€æ°ã®å€ãæ°ããå€æ°ã«ã³ããŒã§ããŸãïŒ9è¡ç®ïŒã ããã«ããã£ãŒã«ãã®å€ãå®çŸ©ãããŠããªãå Žåãå®å
šãªã³ããŒãååŸãããå®çŸ©ãããŠããå Žåã察å¿ãããã£ãŒã«ãã¯æ°ããå€æ°ã§åå®çŸ©ãããŸãã ãããã®æäœã¯ãã¹ãŠãã¬ã³ãŒãã®å®çŸ©ã«ãå€ãå€æ°ã®ãã£ãŒã«ãã®å€ã«ã圱é¿ããŸããã
å人çã«ã¯ãããã¯ã¯ã©ã¹ã®èª¬æãšã€ã³ã¹ã¿ã³ã¹åãéåžžã«æãåºãããŸãããããã¯ã¿ãã«å€æ°ãæ ŒçŽããåãªãæ¹æ³ã§ããããšãããäžåºŠåŒ·èª¿ããŠããŸãã
10> rd(name, {first = "Robert", last = "Ericsson"}).
name
11> rd(person, {name = #name{}, phone}).
person
12> P = #person{name = #name{first="Robert",last="Virding"}, phone=123}.
#person{name = #name{first = "Robert",last = "Virding"},
phone = 123}
13> First = (P#person.name)#name.first.
"Robert"
äžèšã®äŸã¯ããã¹ãããããšã³ããªãšå
éšèŠçŽ ã®ã¢ã¯ã»ã¹æ§æã瀺ããŠããŸãã
1.7ãã€ããªããŒã¿ãšãããæåå
ãã€ããªã¿ã€ãïŒ
Binaries ïŒãšãããæååïŒ
ãããæåå ïŒã®äž¡æ¹ã«ããããã€ããªã³ãŒããçŽæ¥æäœã§ããŸãã ãã€ããªã¿ã€ããšãããæååã®éãã¯ããã€ããªããŒã¿ã¯æŽæ°ãã€ãã®ã¿ã§æ§æãããå¿
èŠãããããšã§ãã ãããã®ãããæ°ã¯8ã®åæ°ã§ãã ãããæååã䜿çšãããšããããã¬ãã«ã§ããŒã¿ãæäœã§ããŸãã åºæ¬çã«ããã€ããªåã¯ãããæååã®ç¹æ®ãªã±ãŒã¹ã§ããããã®ãããæ°ã¯8ã®åæ°ã§ãã æ§é ãèšè¿°ããŠããŒã¿ãäœæãããã³ãã¬ãŒãã§ãã®ã¿ã€ãã䜿çšã§ããŸãã ãã€ããªããŒã¿ã¯æ¬¡ã®æ§é ã§èšè¿°ãããŸãã
<<E1, E2, ... En>>
ãã®ãããªæ§é ã®å¥ã®èŠçŽ ã¯ã
ã»ã°ã¡ã³ããšåŒã°ã
ãŸã ã ã»ã°ã¡ã³ãã¯ããã€ããªããŒã¿ã®è«çæ§é ãè¡šããä»»æã®æ°ã®ããã/ãã€ãã§æ§æãããŸãã ããã¯ããã³ãã¬ãŒãã§äœ¿çšãããšéåžžã«åŒ·åã§äŸ¿å©ãªããŒã«ã«ãªããŸãïŒãã®ãããªã¢ããªã±ãŒã·ã§ã³ã®äŸã«ã€ããŠã¯ã第3éšã§èª¬æããŸãïŒã
1> <<20, $W, 50:8, "abc">>.
<<20,87,50, "abc" >>
2> <<400>>.
<<144>>
3> <<400:16>>.
<<1,144>>
4> Var = 30.
30
5> <<(Var + 30), (20+5)>>.
<<60,25>>
çç±ãç解ããããã«ã2è¡ç®ã«ãã€ããªããŒã¿ãäœæããçµæãäºæ³ããã400ã§ã¯ãªãã144ïŒã€ãŸããåºåæã«ãã¹ãŠã®ããžã¿ã«ããŒã¿ã10é²æ°ã«å€æããã·ã§ã«ãå¿ããŠããªãããã10010000ïŒãåŸãããŸããã»ã°ã¡ã³ãèšè¿°ã®ãããæ§æãæ€èšããŠãã ããã
Ei =å€|
å€ïŒãµã€ãº|
å€/ TypeSpecifierList |
å€ïŒãµã€ãº/ TypeSpecifierList
å®å
šãªã»ã°ã¡ã³ãèšè¿°ãã©ãŒã ã¯ã
å€ ã
ãµã€ãº ãããã³
修食å ïŒ
TypeSpecifierList ïŒã§æ§æãããŸãã ããã«ããµã€ãºãšæå®åã¯ãªãã·ã§ã³ã§ãããæå®ããªãå Žåã¯ããã©ã«ãå€ã䜿çšããŸãã
ã³ã³ã¹ãã©ã¯ã¿ãŒ
ã®å€ã«ã¯ãæ°å€ïŒæŽæ°ãŸãã¯æµ®åå°æ°ç¹ïŒããããæååããŸãã¯æååã䜿çšã§ããŸãããããã¯ãå®éã«ã¯æŽæ°ã®ãªã¹ãã§ãã ãã ããåæã«ãã»ã°ã¡ã³ãã®å€ãå¶æ°ã®ãªã¹ãã«ããããšã¯ã§ããŸããã ã³ã³ã¹ãã©ã¯ã¿å
ã§ã¯ãæååã¯ãªã¹ãã§ã¯ãªãæŽæ°ãžã®æåããšã®å€æã®ããã®æ§æç³è¡£ã§ãã ã€ãŸã ãšã³ããª
<<â abcâ >>ã¯
<< [$ aã$ bã$ c] >>ã§ã¯ãªã
ã<< $ aã$ bã$ c >>ã®æ§æç³ã§ãã
ãã³ãã¬ãŒãå
ã§ã¯ãå€ã¯ãªãã©ã«ãŸãã¯æªå®çŸ©ã®å€æ°ã«ããããšãã§ããŸãã ãã¹ãããããã³ãã¬ãŒãã¯èš±å¯ãããŸããã åŒã¯
Valueã§ã䜿çšã§ããŸããããã®å Žåãã»ã°ã¡ã³ããæ¬åŒ§ã§å²ãå¿
èŠããããŸãïŒ5è¡ç®ïŒã
ãµã€ãºã¯ã»ã°ã¡ã³ãã®ãµã€ãºãåäœïŒ
Unit ããããã«ã€ããŠã¯å°ãäœãïŒã§æ±ºå®ããæ°å€ã§ãªããã°ãªããŸããã
Sizeã®ããã©ã«ãå€ã¯ã¿ã€ãïŒ
Type ã以äžãåç
§ïŒ
Valueã«äŸåããŸãããæ瀺çã«èšå®ããããšãã§ããŸãã æŽæ°ã®å Žåãããã¯8ã64ã®æµ®åå°æ°ç¹æ°ããã€ããªã¯ãã€ãæ°ã«å¯Ÿå¿ãããããæååã¯ãããæ°ã«å¯Ÿå¿ããŸãã ãããåäœã®åèšã»ã°ã¡ã³ããµã€ãºã¯ã
Size *
UnitãšããŠèšç®ã§ããŸãã
ãã³ãã¬ãŒãã§äœ¿çšããå Žåã
Sizeå€ã¯æ瀺çã«èšå®ããå¿
èŠãããïŒ7è¡ç®ïŒãæ®ãã®ããŒã¿ãå«ãŸãããããæåŸã®ã»ã°ã¡ã³ãã®ã¿ã«èšå®ããããšã¯ã§ããŸããïŒå¿
èŠãªæåæ°ã®é·ããæå®ããã«ãéå§æåããè¡æ«ãŸã§ã®è¡ãèªã¿åãã®ãšåæ§ã§ãïŒã
6> Bin = <<30>>.
<<30>>
7> <<X:2, Y:3, Z/bits>> = Bin,
8> Z. % 3 , 110
<<6:3>>
æå®å ïŒ TypeSpecifierList ïŒã¯ããã€ãã³ã§åºåãããã©ã³ãã ãªé åºã§æžã蟌ãŸããçµã蟌ã¿ãªãã·ã§ã³ã®ãªã¹ãã§æ§æ
ãããŸã ïŒèªã¿ãããããããã«ããŠããããæåŸã«èšè¿°ããããšããå§ãããŸãïŒã
Type = integer | float | binary | bytes | bitstring | bits
Valueã®ã¿ã€ãã瀺ããŸãã ãã€ãã¯ããã€ããªã®çã圢åŒã®æžã蟌ã¿ã§ããããããæååã®ãããã§ãã ããã©ã«ãå€ã¯æŽæ°ã§ãã
Signedness = signed | unsigned
æŽæ°ã«ç¬Šå·ããããã笊å·ãªãã®å€ã§ãããã瀺ããŸãã ã¿ã€ãå
šäœã«å¯ŸããŠã®ã¿æå³ããããŸãã ããã©ã«ãå€ã¯ç¬Šå·ãªãïŒã€ãŸããæ£ã®ç¬Šå·ãªãæŽæ°ïŒã§ãã
Endianness = big | little | native
ãã€ããªãŒã㌠ã 1ãã€ãã¯0ã255ã®æŽæ°ã®ç¯å²ããšã³ã³ãŒãã§ããããã倧ããªæ°å€ã®å Žåã¯2ãã€ã以äžãå¿
èŠã§ãã ããšãã°ã2ãã€ãã§ãšã³ã³ãŒããããæ°å€400ã¯00000001 10010000ã®ããã«ãªããæåã®ãã€ããæåïŒæå€ããæäžäœãŸã§ïŒãšèŠãªãããŸãã ããã¯ããããã¯ãŒã¯ãã€ããªãŒããŒïŒããã°ãšã³ãã£ã¢ã³ïŒã§ãã äžäœãã€ããæåã«æ¥ããšä¿¡ããããŠãããšãã圌ãã¯Intelãã€ããªãŒããŒïŒãªãã«ãšã³ãã£ã¢ã³ïŒã«ã€ããŠè©±ããŸãã å€nativeã¯ãä»®æ³ãã·ã³ãå®è¡ãããŠããäžå€®åŠçè£
眮ã«ããã€ãã£ããã§ããã¢ãŒãã«å¿ããŠãããŒãæã«ãã€ãé åºãèšå®ãããããšãæå³ããŸãã é åºã¯æ°åã«å¯ŸããŠã®ã¿æå³ããããŸãã ããã©ã«ãå€ã¯å€§ããã§ãã
Unit = unit:IntegerLiteral
åäœ 1ã256ã®ç¯å²ã®æ°å€ã Sizeãšãšãã«ãã»ã°ã¡ã³ããµã€ãºããããåäœã§äžæã«æ±ºå®ããæ瀺çã«Sizeãæå®ããªããšæå®ã§ããŸããã ããã©ã«ãå€ã¯ãæ°å€ãšãããæååã®å Žåã¯1ããã€ããªã¿ã€ãã®å Žåã¯8ã§ãã
ãããã£ãŠã2è¡ç®ã®äŸã¯ããæ確ã«ãªãã¯ãã§ãã Erlangã§ã¯ãç°ãªããµã€ãºãæ瀺çã«æå®ããªãéããããã©ã«ãã®ãã€ããªããŒã¿ã³ã³ã¹ãã©ã¯ã¿ãŒã¯1ãã€ãã«çããã»ã°ã¡ã³ããäœæããŸãã ãããã£ãŠãè¡2ã«ã¯ã
<<400:8/integer-unsigned-big-unit:1>>
ãšãã圢åŒã®ã¬ã³ãŒããå«ãŸããŸããããã¯ãä»®æ³ãã·ã³ã«ãã£ãŠæåŸã®1ãã€ãã«åãæšãŠãããŸãã ãããã¯ãŒã¯ãã€ãã·ãŒã±ã³ã¹ã§ã¯ãå€ã10010000ã®æåŸã®ãã€ããã€ãŸã 144ãã10é²å€ã ã·ãŒã±ã³ã¹ãå°ãæå®ãããšãæåŸã¯00000001ãã€ãã«ãªããŸãã 1ãã10é²å€ã ã»ã°ã¡ã³ããå€ããšã³ã³ãŒãã§ããå ŽåãåãæšãŠã¯çºçããŸããã
9> <<400:16>>.
<<1,144>>
10> <<400:16/little>>.
<<144,1>>
11> <<400:8/unit:2>>.
<<1,144>>
ãããæ§æã䜿çšãããšãåãããŒã¿ãããŸããŸãªæ¹æ³ã§èšè¿°ã§ããŸãïŒè¡9ãš11ã¯åã2ãã€ãæ§é ãèšè¿°ããŠããŸãïŒã
ã¡ã¢ãªã®æ¶è²»ãšå¶éã 3 ... 6ããã+çŽæ¥ããŒã¿èªäœã 32çªç®ã®ã¢ãŒããã¯ãã£ã§ã¯ã536,870,911ãã€ãã®æäœãå¯èœã§ãã64ãããã·ã¹ãã ã§ã¯ã2,305,843,009,213,693,951ãã€ããå¯èœã§ãã 倧ããªæ§é ãåŠçããã«ã¯ãåŠçé¢æ°ãèªåã§äœæããå¿
èŠããããŸãã
ã泚æ ãšã³ããª
B=<<1>>
ã¯ã
B =<<1>>
ãšããŠè§£éãã
B =<<1>>
ïŒã€ãŸããBã¯<1 >>以äžã§ãïŒã æ£ãããã©ãŒã ã«ã¯ã¹ããŒã¹ãå«ãŸããŸãïŒ
B = <<1>>
ã
1.8ãªã³ã¯
åç
§ã¯make_ref / 0ã«ãã£ãŠäœæãããçšèªã§ãããäžæãšèŠãªãããšãã§ããŸãã ãã®ãããªããŒã¿æ§é ã«äž»ããŒãšããŠäœ¿çšã§ããŸãã
ã¡ã¢ãªã®æ¶è²»ãšå¶éã 32ãããã¢ãŒããã¯ãã£ã§ã¯ãçŸåšã®ããŒã«ã«ããŒãã§ã¯ãªã³ã¯ããšã«5ãã·ã³ã¯ãŒãããªã¢ãŒãããŒãã§ã¯7ã¯ãŒããå¿
èŠã§ãã ãããã64ã¯ãŒãã4ã¯ãŒãã6ã¯ãŒãã ããã«ããªã³ã¯ã¯
ããŒãããŒãã«ã«é¢é£ä»ããããŠãã
ã RAMãæ¶è²»ããŸãã
1.9ããŒã«
ããŒã«åã¯æ¬äŒŒåã§ã å®éããããã¯
trueãš
falseã® 2ã€ã®ååã«ãããŸããã
1.10é¢æ°ãªããžã§ã¯ã
楜ãã
ïŒPattern11ã...ãPattern1NïŒ[GuardSeq1ã®å Žå]->
Body1;
...;
ïŒPatternK1ã...ãPatternKNïŒ[GuardSeqKã®å Žå]->
ããã£ã¯
çµãã
é¢æ°å®£èšã¯
funããŒã¯ãŒãã§å§ãŸãã
endããŒã¯ãŒãã§
çµãããŸãã ãã©ã¡ãŒã¿ãŒã®ã»ããã¯ãæ¬åŒ§å
ã®ã³ã³ããä»ããŠæž¡ãããŸããåãã©ã¡ãŒã¿ãŒã¯ãã³ãã¬ãŒãã§ãã å
¥åãã©ã¡ãŒã¿ãŒããã¿ãŒã³ã«äžèŽããå Žåãäžé£ã®åœä»€ãèšå·->ãã;ã«å®è¡ãããŸãã ã€ãŸã æ¬è³ªçã«ãå
¥ååŒæ°ã¯å
¥åãã£ã«ã¿ãŒãšããŠæ©èœããŸãã è€æ°ã®ãã¿ãŒã³ãäžèŽããªãå Žåããšã©ãŒã¡ãã»ãŒãžãçæãããŸãã
1> Fun = fun({centimetre, X}) -> {meter, X/100} end.
#Fun<erl_eval.6.13229925>
2> Fun(10).
** exception error: no function clause matching
erl_eval:'-inside-an-interpreted-fun-'(10)
3> Fun({centimetre, 10}).
{meter,0.1}
ãã ããé¢æ°ã®å®çŸ©ãç°ãªãå Žåã2è¡ç®ã®ãšã©ãŒã¯çºçããŸããã
4> fïŒïŒã
ããã£ã
5> Fun = funïŒ{centimetreãX}ïŒ->
5> {meterãX / 100};
5>ïŒXïŒ->
5> X / 100
5>çµäºã
#Fun <erl_eval.6.13229925>
6>楜ããïŒ10ïŒã
0.1
ãããã£ãŠãå
¥ååŒæ°ã¯ãé¢æ°ã§å®£èšããããã®ãšåãåã§ãªããã°ãªããŸããã
whenããŒã¯ãŒãã®åŸããã³before-
>ã«ã¯ãçµæãtrueãŸãã¯falseã§ããåŒãå«ããããšãã§ããŸãã åŒãtrueãè¿ãå Žåãé¢æ°ã®æ¬äœãå®è¡ãããŸãã
ãã¹ãŠã®ãã§ãã¯äžã«é¢æ°ã®æ¬äœãå®è¡ãããªãã£ãå ŽåïŒã€ãŸããé¢æ°ãäœãè¿ããªãã£ãå ŽåïŒããšã©ãŒãçæãããŸãïŒè¡12ïŒãé¢æ°å
ã®å€æ°ã¯ããŒã«ã«ã§ãã7> F = funïŒXïŒwhen X <0->
7> X + 1;
7>ïŒXïŒX> 0ã®å Žå->
7> X-1;
7>ïŒ0ïŒ-> 0
7>çµäºã
#Fun <erl_eval.6.13229925>
8> FïŒ5ïŒã
4
9> FïŒ-5ïŒã
-4
10> FïŒ0ïŒã
0
11> X = funïŒYïŒY> 0-> Y + 1 endã®å Žåã
#Fun <erl_eval.6.13229925>
12> XïŒ-5ïŒã
**äŸå€ãšã©ãŒïŒerl_evalã«äžèŽããé¢æ°å¥ã¯ãããŸããïŒ '-inside-an-interpreted-fun-'ïŒ-5ïŒ
13> XïŒ5ïŒã
6
é¢æ°ã¯ãã¹ãã§ããçµæã¯å
éšã®å€éšé¢æ°ã«ãã£ãŠè¿ãããŸãïŒã¡ã¢ãªã®æ¶è²»ãšå¶éããã®é¢æ°ã¯ã9ã13ãã·ã³ã¯ãŒã+ç°å¢ã®ãµã€ãºãåããŸããããã«ãé¢æ°ã¯ãã¡ã¢ãªãå æããé¢æ°ã®ããŒãã«ã«é¢é£ä»ããããŠããŸãã14> Adder = fun(X) -> fun(Y) -> X + Y end end.
#Fun<erl_eval.6.72228031>
15> Add6 = Adder(6).
#Fun<erl_eval.6.72228031>
16> Add6(10).
16
1.11ããã»ã¹ID
Erlangããã»ã¹ã®äœææã«ãããã»ã¹èå¥åïŒPidïŒã¯é¢æ°ãè¿ãspawn/1,2,3,4, spawn_link/1,2,3,4 and spawn_opt/4
ãŸããããã»ã¹ãšå¯Ÿè©±ããããã®äŸ¿å©ãªã¡ã«ããºã ã¯ãããžã¿ã«èå¥åã§ã¯ãªãååã§ã¢ã¯ã»ã¹ããããšã§ãããããã£ãŠãErlangã§ã¯ãã·ã³ããªãã¯åãPidã«é¢é£ä»ããŠããã®ååã䜿çšããŠããã»ã¹ã«ã¡ãã»ãŒãžãéä¿¡ã§ããŸããã¡ã¢ãªæ¶è²»ãšå¶éããã®ã¿ã€ãã¯ãããŒã«ã«ããŒãã«1ãã·ã³ã¯ãŒãããªã¢ãŒãããŒãã«5ãã·ã³ã¯ãŒããåããŸããããã«ããã®é¢æ°ã¯ãã¡ã¢ãªãå æããããŒãããŒãã«ã«é¢é£ä»ããããŸãã1> spawn(m, f, []).
<0.51.0>
1.12ããŒãID
ããŒãèå¥åïŒããŒãèå¥åïŒé¢æ°ãè¿ãopen_port/2
ããªããããŒããäœæããŸããããŒãã¯ãErlangããã»ã¹ãšå€éšã®äžçãšã®çžäºäœçšã®åºæ¬çãªã¡ã«ããºã ã§ããå€éšããã°ã©ã ãšéä¿¡ããããã®ãã€ãæåã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸããããŒããäœæããããã»ã¹ã¯ãããŒãã®ææè
ãŸãã¯æ¥ç¶ãããããã»ã¹ãšåŒã°ããŸããããŒãã«ãããŒããééãããã¹ãŠã®ããŒã¿ã¯ãããŒãã®ææè
ãééããŸããããã»ã¹ãå®äºãããšãããŒãèªäœãšå€éšããã°ã©ã ãçµäºããã¯ãã§ããå€éšããã°ã©ã ã¯ãæšæºå
¥åºåããããŒã¿ãéåä¿¡ããå¥ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã»ã¹ã§ããå¿
èŠããããŸãããã¹ãŠã®Erlangããã»ã¹ã¯ããŒããä»ããŠããŒã¿ãéä¿¡ã§ããŸãããããŒãã®ææè
ã®ã¿ãããŒããä»ããŠããŒã¿ãåä¿¡ã§ããŸããããŒãèå¥åããã³ããã»ã¹èå¥åã«ã¯ãèšå·åãç»é²ã§ããŸããã¡ã¢ãªæ¶è²»ãšå¶éããã®ã¿ã€ãã¯ãããŒã«ã«ããŒãã«1ãã·ã³ã¯ãŒãããªã¢ãŒãããŒãã«5ãã·ã³ã¯ãŒããåããŸããããã«ãé¢æ°ã¯ããŒãããŒãã«ãšããŒãããŒãã«ã«é¢é£ä»ããããŠããããããã¡ã¢ãªãæ¶è²»ããŸããPSããã«ã€ããŠã¯ãåºæ¬åã®èª¬æã§æåã®éšåãçµäºããŸãããã®ç¬éãŸã§ãç§ãç¶ç¶ãåãäžãããŸã§ããŸã æéããªã人ã«ã¯ãããã¥ã¡ã³ããGetting Started with Erlangãã®ç« ã®ç¿»èš³ã§ãããGetting Started with Erlangãã«ç²Ÿéããããšã匷ããå§ãããŸãã