programming erlang ch5 - andstudy/forge GitHub Wiki
- BIF - Built In Function
- Binary
- Bit
- Etc
-
์ผ๋ญ์ ๋ด์ฅ๋ ํจ์. ์ผ๋ญ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๋ ์์ ๋ค์ ์ํํ๋ค.
tuple_to_list({12,cat,"hello"}). time().- tuple_to_list /1 : ํํ์ ๋ฆฌ์คํธ๋ก ๋ณํ
- time/0 : ์ค๋ ํ์ฌ ์๊ฐ์ ์,๋ถ,์ด๋ก ๋ฐํํ๋ค.( ํํ์๋ฃํ์ผ๋ก )
-
๋ชจ๋ BIF๋ ๋ง์น erlang๋ชจ๋์ ์ํ ๊ฒ ์ฒ๋ผ ์์ง์ธ๋ค.
- ์์ฃผ ์ฌ์ฉ๋๋ BIF๋ค์ ์๋์ผ๋ก import๋จ.
-
http://www.erlang.org/doc/man/erlang.html ์์ BIF์ ๋ชฉ๋ก์ ์ฐพ์ ์ ์๋ค.
-
๋ฐ์ดํฐ๊ตฌ์กฐ
-
์์ ๋ถ๋ฑํธ ๋๊ฐ์ ํฐ ๋ถ๋ฑํธ ๋๊ฐ๋ก ๋๋ฌ์ผ ์ผ๋ จ์ ์ ์ ๋๋ ๋ฌธ์์ด๋ก ์์ฑ๋๊ณ ์ถ๋ ฅ๋จ
<<5,10,20>>. <<"hello">>. -
๋ฐ์ด๋๋ฆฌ์์ ์ ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ ์ ๊ฐ๊ฐ์ 0~255๋ฒ์. ๋์ด๊ฐ ๊ฒฝ์ฐ 0๋ถํฐ ๋ค์ ์์ํ๋ค.
- ๋ฌธ์์ด์ ์์คํค๋ฌธ์์ฝ๋๋ก ๊ตฌ์ฑ๋ ๋ฐ์ด๋๋ฆฌ.
-
๋ฐ์ด๋๋ฆฌ ์กฐ์ BIF
@spec list_to_binary(IoList) -> binary() @spec split_binary(Bin,Pos) -> {Bin1, Bin2} @spec term_to_binary(Term) -> Bin external term format? http://www.erlang.org/doc/apps/erts/erl_ext_dist.html @spec binary_to_term(Bin) -> Term B = term_to_binary({binarise,"are",useful}). <<131,104,3,100,0,8,98,105,110,97,114,105,101,115,107,0,3,97,114,101,100,0,6,117,115,101,102,117,108>>. binary_to_term(B). {binaries,"are",useful} @spec size(Bin) -> Int
-
๋นํธ ๊ตฌ๋ฌธ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ์ ๋ค์ด ์๋ ๊ฐ๋ณ ๋นํธ ๋๋ ์ฐ์ํ ๋นํธ๋ค์ ์ถ์ถํ๊ณ ๋ฌถ๋ ๋ฐ ์ฌ์ฉํ๋ ํจํด ๋งค์นญ์ ํ์ฅํ์ด๋ค.
- ํ๋กํ ์ฝ ํ๋ก๊ทธ๋๋ฐ ์ฉ์ผ๋ก ๊ฐ๋ฐ๋์ด ํ๋กํ ์ฝ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ๊ณ ํธ๋ ๋ฐ ์์ด ๋งค์ฐ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
-
X,Y,Z๋ฅผ ๋ณ์ M์ 16๋นํธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ๋ฌถ์ผ๋ ค ํ๋ ๊ฒฝ์ฐ.
M = << X:3, Y:7, Z:6>> -
16๋นํธ ์์ ๋ฌถ๊ณ ํ๊ธฐ
Red = 2. Green = 61. Blue = 20. Mem = <<Red:5, Green:6, Blue:5>>. <<23,180>>
์๋๋ฅผ ํ๊ฒฝ์ฐ ํจํด ๋งค์นญ์ ์ด์ฉ.
-
๋นํธ ๊ตฌ๋ฌธ์
<<>> <<E1,E2,...,En>>-
Ei๋ ๋ฐ์ด๋๋ฆฌ์์ ํ๋์ ์ธ๊ทธ๋จผํธ๋ฅผ ๊ฐ๋ฆฌํด. Ei๋ ๋ค์ ์ค ํ๊ฐ์ง ํํ๊ฐ ๊ฐ๋ฅ
Ei = Value | Value : Size | Value/TypeSpecifierList | Value:Size/TypeSpecifierList
-
์ด๋ค ํํ๋ฅผ ์ฌ์ฉํ๊ฑด ๋ฐ์ด๋๋ฆฌ์ ์ ์ฒด ๋นํธ ์๋ 8๋ก ๋๋์ด ๋จ์ด์ ธ์ผ ํ๋ค. ์ด์ ๋? ์ฑ ์!
-
Value, Size, TypeSpecifieList์ ์ ํ. (ํจํด ๋งค์นญ์์๋ ๋ ๋ค๋ฅด๋ค)
-
(๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ตฌ์ฑํ ๊ฒฝ์ฐ) Value ๋ ๋ฐ์ด๋ ๋ณ์ ์ด๊ฑฐ๋ ๋ฆฌํฐ๋ด ๋ฌธ์์ด ์ ์, ๋ถ๋ํ, ๋ฐ์ด๋๋ฆฌ
-
Size๋ ์ ์. Size์ ๊ฐ์ ์ ๋์ ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ค.
@type End = big | little | native @type Sign = signed | unsigned @type Type = integer | float | binary @type Unit = 1 | 2 | ... | 255 -
๊ณ ๊ธ ๋นํธ ๊ตฌ๋ฌธ ์์
- MPEG ๋ฐ์ดํฐ์์ ๋๊ธฐํ ํ๋ ์ ์ฐพ๊ธฐ
- COFF ๋ฐ์ดํฐ ํ๊ธฐ
- IPv4 ๋ฐ์ดํฐ๊ทธ๋จ์์ ํค๋ํ๊ธฐ
-
apply - ํจ์์ ๋ชจ๋์ ์ด๋ฆ์ด ๋์ ์ผ๋ก ๊ณ์ฐ. ํจ์์ ์ด๋ฆ๊ณผ ์ธ์๋ก๋ถํฐ ํจ์๊ฐ ๊ณ์ฐ
-
apply(Mod,Func,[Arg1,Arg2,..,ArgN]) - BIF Mod:Func(Arg1,Arg2,...,ArgN) ๊ณผ ๋์ผ ํ๋ค.
apply(erlang, atom_to_list,[hello]).
-
-
์ฃผ์์ฌํญ ์ ์ฑ ์!
-
์์ฑ - ์ผ๋ญ ๋ชจ๋ ์์ฑ์ ๊ตฌ๋ฌธ๊ณผ ์๋ฏธ
-
-AtomTag(...)์ ๊ตฌ๋ฌธ, ํ์ผ์ ํน์ ํ ์์ฑ์ ์ ์ํ๋๋ฐ ์ฌ์ฉ
-
์ฌ์ ์ ์๋ ๊ฒ๊ณผ ์ฌ์ฉ์ ์ ์ ์์ฑ ๋ ์ ํ์ด ์กด์ฌ
-
-record(...)์ -include(...)๋ ๋ชจ๋ ์์ฑ์ผ๋ก ์ทจ๊ธ X
-
์ฌ์ ์ ์๋ ์์ฑ
-module(modname) -import(Mod,[Name1/Arity1,Name2/Arity2,...]). -export([Name1/Arity1,Name2/Arity2,...]). -compile(Options). Option์ ๋ํด์๋ compile๋ชจ๋์ ๋งค๋ด์ผ ํ์ด์ง์ ์ค๋ช ๋์ด์์. -vsn(Version).
-
-
์ฌ์ฉ์ ์ ์ ์์ฑ
-SomeTag(Value).
SomeTag๋ Atom์ด์ด์ผ ํ๋ฉฐ, Value๋ ๋ฆฌํฐ๋ด ํ ์ด์ด์ผ ํ๋ค.
-
๋ธ๋ก ์ - begin & end
begin Expr1, ...., ExprN end -
๋ถ๋ฆฌ์ธ ์ - ๋ชจ๋ ๋ถ๋ฆฌ์ธ ์
- not B1
- B1 and B2
- B1 or B2
- B1 xor B2
-
๋ฌธ์ ์งํฉ
- ์ผ๋ญ ์์ค์ฝ๋ ํ์ผ๋ค์ ISO-8859-1(Latin-1)๋ฌธ์ ์งํฉ์ผ๋ก ์ธ์ฝ๋ ๋๋ค๊ณ ๊ฐ์
-
์ฃผ์
-
%๋ก ์์, ์ค์ ๋๊น์ง ์ํฅ์ ๋ฏธ์น๋ค.
-
%% ์ด๋งฅ์ค ์ผ๋ญ ๋ชจ๋์์ ์ธ์๋จ.
% my_func(Arg1,Arg2) -> case f(Arg1) of {...} -> ์ฃผ์ ์๋ํจ.
-
-
epp - ์ผ๋ญ ์ ์ฒ๋ฆฌ๊ธฐ
- compile:file(M,['P']) ์ ์ฒ๋ฆฌ๊ธฐ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ๋ก ์ ์ฅ ํ ์ ์๋ค.
-
์ด์ค์ผ์ดํ ์ํ์ค - ๋ฌธ์์ด๊ณผ atom์์ ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ
- ๋ฌธ์์ด์ด๋ ๋ค์ดํ๊ฐ ๋ถ์ Atom๋ด์์ ์ถ๋ ฅ ๋ถ๊ฐ๋ฅ ํ ๋ฌธ์๋ค์ ์ถ๋ ฅํ๊ฒ ํด์ค.
-
์๊ณผ ์ ์ํ์ค
- ์ : ํ๊ฐ๋์ด ๋์ฌ ์ ์๋ ๊ฒ
- ์ผํ๋ก ๊ตฌ๋ถ๋ ์ผ๋ จ์ ์. ์ํ์ค์ ๊ฐ์ ๋ง์ง๋ง ์์ ๊ฐ์ผ๋ก ์ ์ ๋จ. ์์ ์์์ ์์ฑ๋ ๋ชจ๋ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉ
-
ํจ์ ์ฐธ์กฐ ๋ฒ
- fun LocalFunc/Arity
- Mod:RemoteFunc/Arity
-
์ธํด๋ฃจ๋ ํ์ผ - ์ปดํ์ผ ์ ํ์ผ์ ํฌํจ์ํค๋ ๋ฒ
- include(Filename). ์ธํด๋ฃจ๋ํ์ผ์ ํ์ฅ์๋ .hrl. ์ ๋๊ฒฝ๋ก๋ ์๋๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ผํจ - include_lib(Name). ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํค๋ํ์ผ ํฌํจ์ํฌ๋ ๋ฆฌ์คํธ์ฐ์ฐ - ++์ -- -
๋งคํฌ๋ก - ์ผ๋ญ ๋งคํฌ๋ก ์ฒ๋ฆฌ๊ธฐ
-
-define(Constant, Replacement).
-
-define(Func(V1,...,VN),Replacement).
-
๋งคํฌ๋ก ํธ์ถ : ?MACRO
-
๋งคํฌ๋ก ์ ์ ์ด ํ๋ฆ
-undef(Macro). -ifdef(Macro). -ifndef(Macro). -else. -endif.
-
-
๋งคํฌ๋ก๋ฅผ ์ผ๊ณ ๋๋ ๋ฐฉ์์ผ๋ก ์ปดํ์ผ์ ๋ถ๊ฐ์ ์ธ ์ต์ ์ ์ค ์ ์๋ค.
-
ํจํด์์์ ๋งค์น ์ฐ์ฐ
-
์ซ์
-
์ ์์ ๋ถ๋ํ์ผ๋ก ๋๋จ
-
์ ์๋ ์ผ๋ฐ์ ์ธ ์์ K์ง๋ฒ์,$๊ตฌ๋ฌธ์ผ๋ก ๋๋๋ค.
-
๋ถ๋ํ์ ๋ค์ฏ๋ถ๋ถ์ผ๋ก ๋๋๋ค. option,์ ์,์์์ ,์ ์,์ ํ์ ์ธ ์ง์
-
์ฐ์ฐ์ ์์ - ์ฐ์ ์์์ ๊ฒฐํฉ ๋ฐฉ์
-
์ฑ ์ฐธ์กฐ.
-
ํ๋ก์ธ์ค ์ฌ์
-
ํ๋ก์ธ์ค๋ง๋ค ๊ฐ์ง๋ ๊ณ ์ ํ ๊ฐ๋ณ ๋ฐ์ดํฐ ์ ์ฅ์.
-
ํค์ ๊ฐ์ ์งํฉ์ผ๋ก ๊ตฌ์ฑ๋ ์ฐ๊ด๋ฐฐ์ด( map or hashmap ๋ฑ๋ฑ์ผ๋ก ๋ถ๋ฆฐ๋ค ).
-
control BIF
@spec put(Key,Value) -> OldValue @spec get(Key) -> [{Key,Value}]. @spec get() -> ๋ชจ๋ ๋ฆฌ์คํธ @spec get_keys(Value) -> [Key]. @spec erase(Key) -> Value @spec erase() -> [{Key,Value}]. -
Side effect ๋ฐ์
-
๋ ํผ๋ฐ์ค - ์ ์ผํ ์ฌ๋ฒ *erlang:make_ref()๋ก ์์ฑ *์ ์ผํ ์ ์ญ ํ .
-
๋จ๋ฝ ๋ถ๋ฆฌ์ธ์ - ์์ ํ ํ๊ฐ๋์ง ์๋ ๋ถ๋ฆฌ์ธ ์ *Expr1 orelse Expr2 *Expr2 andalso Expr2
-
ํ ๋น๊ต์ ํ ์ ์ฌ์ ์ ์์
- number < atom < ref < fun < port < pid < tuple < list < binary
- =:= , =/=๋ฅผ ์ ์ธํ ๋ชจ๋ ํ
๋น๊ต ์ฐ์ฐ์์ ์๋( ์ธ์๊ฐ ์ซ์์ผ ๊ฒฝ์ฐ)
- ์ ์,๋ถ๋ํ ์ผ๊ฒฝ์ฐ ์ ์๋ฅผ ๋ถ๋ํ์ผ๋ก ๋ณํ
- ๊ฐ์ ๊ฒฝ์ฐ ๋ณํ ์์ด ์ฌ์ฉ
- ==์ ์ฌ์ฉ ์ฃผ์. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ == ๋ =:=๋ก ์ฌ์ฉํด์ผ ํ๋ค.
-
๋ฐ์ค ๋ณ์
- ์ต๋ช ๋ณ์๊ฐ ์๋, ์ ์์ ์ธ ๋ณ์์ ์๋ฆฌ์ VarName๊ฐ์ ๊ตฌ๋ฌธ ์ฌ์ฉ ๊ฐ๋ฅ