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 ?
たぶん。。。^^;