erlang リスト, 文字列

この時の冒頭の話ですが、「編集画面モード」からも出来る気がしてきた。

 *数字*[タグ1][タグ2]タイトル

って書けば良いっぽい・・・でも数字はどうやって決めるのでしょう?(=w=
ま、1日1件だけにしておけって事で!

リスト

  • 個数が決まっていないものを入れる
  • []で囲む
1> MyClass = [{boys, 20}, {girls, 10}].
[{boys,20},{girls,10}]
  • 要素は何型でもOK
2> X = [1, 2, 3, apple, '@', {name, hiroyuki}].
[1,2,3,apple,'@',{name,hiroyuki}]
  • リストの先頭の事をヘッドと呼び、残りをテールと呼ぶ
  • "|"をヘッドとテールの区切りとして使う
3> [Head | Tail] = MyClass.
[{boys,20},{girls,10}]
4> Tail.
[{girls,10}]
    • 残り要素が1個でも、テールはリストとして取り出される
  • "|"を使えば、リストへの追加もOK
5> Y = [99, 99, 99, MyClass | X].
[99,99,99,
 [{boys,20},{girls,10}],
 1,2,3,apple,'@',
 {name,hiroyuki}]
    • "|"を使う時はテールをリストにする
      • テールがリスト出ない時は「不正な形式」と呼ばれる
6> [1, 2| 3].
[1,2|3]
7> [A | B] = [1, 2| 3].
[1,2|3]
8> B.
[2|3]
9> [C | D] = B.
[2|3]
10> D.
3
        • ライブラリ関数の大半は「不正な形式」を仮定していない
  • リストの連結も可
11> Z = Y ++ X.
[99,99,99,
 [{boys,20},{girls,10}],
 1,2,3,apple,'@',
 {name,hiroyuki},
 1,2,3,apple,'@',
 {name,hiroyuki}]
  • リストから取り除く
12> Z -- [apple, '@', '@'].
[99,99,99,
 [{boys,20},{girls,10}],
 1,2,3,
 {name,hiroyuki},
 1,2,3,apple,
 {name,hiroyuki}]
    • 最初にあるものだけ取り除かれる
      • 2個消したいモノは2個書く
  • ここまでにも出てきていますが、取り出す場合は、タプルと同じような方法
13> [_, _, _, _, _, _, _, _, _, {_, Q}] = Y.
[99,99,99,
 [{boys,20},{girls,10}],
 1,2,3,apple,'@',
 {name,hiroyuki}]
14> Q.
hiroyuki

無名変数が多いと見難い>_<。

文字列

  • 厳密に言えばerlangにはない
    • 文字列は整数のリスト
  • ""で囲む
15> "Hello".
"Hello"
16> [97, 98, 99, 100, 10, 8].
"abcd\n\b"
17> [97, 98, 99, 100, 10, 7].
[97,98,99,100,10,7]
    • リストに含まれる値全ての整数がLatin-1(ISO-8859-1)の範囲で表示可能な文字である場合、リストを文字列として表示する
  • 文字と整数の対応を調べるのは"$"
18> $A.
65
19> [65 + 32].
"a"

何も考えずにwindowsで日本語を入れてみた。(番外編2)

番外編1

  • 全てを忘れたい
20> f().
ok
21> Z.
 * 1: variable 'Z' is unbound

人生で欲しいかも?

番外編2

1> "あ".
[130,160]
2> "あい".
[130,160,130,162]
3> "あい逃".
[130,160,130,162,147,166]
4> $"あい逃".


f()

aae
taetaetaetnaoetnaoi
rrrr
^G
Eshell V5.7.4  (abort with ^G)
1>

SJISのコードになるらしい
"$"をつけた後の無駄な改行や、f()や、変な文字列は、反応がなくなったので、適当に叩いた形跡です。

Erlang は文字列のエンコーディングについては、一切関知しません。そもそもErlang では文字列は整数のリストです。リストの中に好きなようにコードを並べてください、というスタンスのようです。
そのためソースファイルの文字コードSJISEUCUTF-8 等にしておけば、それらの文字コードで文字列リテラルを書くことができます。

http://ancient.s6.xrea.com/erlang/erlang.pdf

ま、勉強が進んだら調べよう。