Erlangを試してみる (003)

参考にするのは、 @ymotongpoo の訳してくれた、http://ymotongpoo.appspot.com/lyse_ja/index.html

感謝、感謝であります。。

(本当に)始めましょう!

http://ymotongpoo.appspot.com/lyse_ja/ja/starting_out_for_real.html

shellを使った、レクチャをしています。

つづき、です。。

変化できない変数

値の入っていない変数には、入力できるが、値が入っている物には、できない!

[ guutara]$ 
[ guutara]$ erl
Eshell V5.8.5  (abort with ^G)
1> One.
 * 1: variable 'One' is unbound
2> One=1.
1
3> Un = Uno = One = 1.
1
4> Two=One+One.
2
5> Two = Two + 1.
 ** exception error: no match of right hand side value 3
6> q().
ok

実際には、=演算子の動きが、比較の役割も果たしている。
値が、不定な場合は、右辺を左辺に代入して、等式を成功させる。<=こいつが、値の設定にみえているだけ?

引用:[= 演算子の動作は”パターンマッチング”と呼ばれるものの基礎になっています。]

Eshell V5.8.5  (abort with ^G)
1> Unknown.
 * 1: variable 'Unknown' is unbound
2> Unknown = 1.
1
3> Unknown = 1.
1
4> Unknown = 2.
 ** exception error: no match of right hand side value 2
5> 1 = 1.
1
6> 1 = 2.
 ** exception error: no match of right hand side value 2
7> q().
ok

なるほど。

あと、変数は、大文字からはじめないと、いけないと。

Eshell V5.8.5  (abort with ^G)
1> two = 2.
 ** exception error: no match of right hand side value 2
2> Two = 2.
2
3> q().
ok

あと、アンダースコアだけの変数は、値を保持しない特殊な変数だと。

Eshell V5.8.5  (abort with ^G)
1> _ = 1+6.
7
2> _ .
 * 1: variable '_' is unbound
3> q().
ok

シェル内だけ有効な、f()は、全ての変数の値をリセット!
()の中に、変数名をいれたら、それだけを、りせっと!

打ち間違いも、そのまま。。

Eshell V5.8.5  (abort with ^G)
1> one = 1.
 ** exception error: no match of right hand side value 1
2> One = 1.
1
3> One .
1
4> Two = 2.
2
5> Two.
2
6> f(One).
ok
7> One.
 * 1: variable 'One' is unbound
8> Two.
2
9> One = 1.
1
10> One .
1
11> f().
ok
12> One.
 * 1: variable 'One' is unbound
13> Two.
 * 1: variable 'Two' is unbound
14> q().
ok
アトム

小文字からはじまるものは、リテラルとして、あつかわれる。
うーん、新鮮だ。。

書いたまんまの、値という事。

引用:「アトムは、小文字以外の文字、あるいはアンダースコア(_)や@など英数字以外から始まっている場合はシングルクォート(‘)で囲まれている必要があります。 」

当然、予約語は、使用してはいけないっと。。

ブール代数と比較演算子

ここれは!!

1> 0 == false.
false
2> 1 < false.
true
3> q().
ok

引用:「Erlangにはtrueやfalseといったブールの値は存在しません。trueとfalseという項はアトムなのです。」

Eshell V5.8.5  (abort with ^G)
1> true and false
.
false
2> false or true
.
true
3> true xor false.
true
4> not false.
true
5> not (true and true).
false

=:= が、厳密な等しい評価。==は、浮動小数と整数の比較に使用できる。
=/= が、厳密な不等の評価。/= は、浮動小数と整数の比較に使用できる。

Eshell V5.8.5  (abort with ^G)
1> 5 =:= 5.
true
2> 5 =/=5.
false
3> 5 =:= 5.0.
false
4> 5 == 5.0.
true
5> 5 /= 5.0.
false
6> q().
ok

不等式。。うげ、間違えた。。

Eshell V5.8.5  (abort with ^G)
1> 1<2.
true
2> 1>2.
false
3> 1==1.
true
4> 1>=1.
true
5> 1<=1.
 * 1: syntax error before: '<='
5> 1=<1.
true
6> q().
ok

全ての型と比較できる!!

引用:「Erlangではどんなものでもすべての型と足し算はできませんが、比較はできます。」

Eshell V5.8.5  (abort with ^G)
1> aaa < 1.
false
2> aaa > 1.
true
3> aaa
.
aaa
4> q().
ok

continue ?

たぶん。。。^^;