Hatena::Grouperlang

msyktの日記

2013-10-26

2.6 整数(p.15)

00:50

=は、実際にはパターン照合演算子だが、Xが未束縛変数の場合は代入と同様に機能する。

Eshell V5.10.1  (abort with ^G)
1> X.
* 1: variable 'X' is unbound
2> X = 10.
10
3> X = 10.
10
4> X = 8.
** exception error: no match of right hand side value 8
5> 

左辺の変数が未束縛だと代入になっている。束縛済みの場合は、左辺の値に対して右辺の値でパターン照合するということらしい。

パターン照合結果であればtrue/falseが返ってきても良さそうなものだが、合致した場合は照合した値が、合致しなかった場合はエラーになっているように見える。erlだからかな。後でもう少し試してみる。

Eshell V5.10.1  (abort with ^G)
1> 10 = 10.
10
2> 9 = 10.
** exception error: no match of right hand side value 10

左辺は変数でなくても良いらしい。左辺が変数ではない場合、必ずパターン照合となるのだろう。

プログラミングErlang

プログラミングErlang

2.6 整数(パターン照合演算子の戻り値)

02:55

パターン照合結果であればtrue/falseが返ってきても良さそうなものだが、合致した場合は照合した値が、合致しなかった場合はエラーになっているように見える。erlだからかな。後でもう少し試してみる。

erlではなく関数の中でパターン照合して戻り値を確認してみる。

-module(example2_6).

-compile(export_all).

-include_lib("eunit/include/eunit.hrl").

test() ->
    X = 10,
    ?debugVal(X = 10),
    ?debugVal(X = 9).
Eshell V5.10.1  (abort with ^G)
1> c(example2_6).
{ok,example2_6}
2> example2_6:test().
example2_6.erl:9:<0.33.0>: X = 10 = 10
** exception error: no match of right hand side value 9
     in function  example2_6:test/0 (example2_6.erl, line 10)

Xを10に束縛した状態で「X = 10」を実行すると、戻り値は10であった。ということは、パターン照合がうまくいった場合は比較した値が、うまくいかなかった場合は例外が起きるということになる。

プログラミングErlang

プログラミングErlang

2013-10-23

2.5 簡単な整数演算(p.13)

00:47

整数の入力方法はいくつかある。16進数表記と32進数表記を使った式は次のようになる:

4> 16#cafe * 32#sugar.

1577682511434

x進数表記っていうのがあるのか。

Eshell V5.10.1  (abort with ^G)
1> 16#cafe. 
51966
2> 32#sugar.
30359899
3> 16#foo.
42974
4> 36#ZZZZ.
1679615
5> 37#ZZZa.
* 1: illegal base '37'

36進数まではOK。英文字の部分がcase-insensitiveなので、37進数以降はダメらしい。

プログラミングErlang

プログラミングErlang