Elixir 練習問題 ControlFlow-3

こんな感じでいいかな。

^o^ > elixir practice_12_3.exs
warning: variable file is unused
  practice_12_3.exs:6

** (RuntimeError) Error occured.
    practice_12_3.exs:3: OK.ok!/1
    (elixir) lib/code.ex:363: Code.require_file/2

ちなみに、somefile の代わりに存在するファイルで試してみると次のようになる。

^o^ > elixir practice_12_3.exs
warning: variable file is unused
  practice_12_3.exs:6

エラーは起きない。警告が出てるのは file 変数を使ってないからだね。

Elixir 練習問題 ControlFlow-1

気が付けば前回の Elixir のエントリからひと月も経ってしまった。
ま、気を取り直して。FizzBuzz を case を使って書け、と。

^o^ > elixir practice_12_1.exs
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

Elixir 練習問題 StringsAndBinaries-7

^o^ > cat sales.csv
id,ship_to,net_amount
123,:NC,100.00
124,:OK,35.50
125,:TX,24.00
126,:TX,44.80
127,:NC,25.00
128,:MA,10.00
129,:CA,102.00
130,:NC,50.00

^o^ > elixir practice_11_7.exs
[[id: 123, ship_to: :NC, net_amount: 100.0],
 [id: 124, ship_to: :OK, net_amount: 35.5],
 [id: 125, ship_to: :TX, net_amount: 24.0],
 [id: 126, ship_to: :TX, net_amount: 44.8],
 [id: 127, ship_to: :NC, net_amount: 25.0],
 [id: 128, ship_to: :MA, net_amount: 10.0],
 [id: 129, ship_to: :CA, net_amount: 102.0],
 [id: 130, ship_to: :NC, net_amount: 50.0]]

Elixir 練習問題 StringsAndBinaries-6

^o^ > elixir practice_11_6.exs
Oh. A dog. Woof.

Elixir 練習問題 StringsAndBinaries-5

^o^ > elixir practice_11_5.exs
  cat
 zebra
elephant

Elixir 練習問題 StringsAndBinaries-4

^o^ > elixir practice_11_4.exs
150
100
200
20.0

Elixir 練習問題 StringsAndBinaries-3

ここのところ Ubuntu ばかりやっていたので、Elixir は久しぶり。

今日の練習問題は、['cat' | 'dog'] という式が、なぜ ['cat', 100, 111, 103] になるのかという問題。まずは実際に確かめてみよう。

^o^ > iex
Eshell V8.0  (abort with ^G)
Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> ['cat' | 'dog']
['cat', 100, 111, 103]

まあ、答えは簡単だ。シングルクォートで囲まれた 'dog' は実はただの整数のリストで、たまたまその整数すべてが文字コードとして解釈できるから 'dog' になっているにすぎない。

iex(2)> [100, 111, 103]
'dog'

ところが、このリストの先頭に 'cat' を追加してしまうと、すべてが文字コードとして解釈できる整数ではなくなってしまう。もう少し正確に言うと、リストの最初の要素がリスト、残りが整数になってしまっている。だから、後ろの3要素は文字ではなく文字コードで表示されている。

Elixir 練習問題 StringsAndBinaries-2

アナグラムの判定。パラメータがダブルクォートの文字列じゃなくて、シングルクォートの文字列なら簡単だ。シングルクォートの文字列はただのリストだから、ソートして比べればいい。

^o^ > iex practice_11_2.exs
Eshell V8.0  (abort with ^G)
Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> Anagram.anagram?('hello', 'world')
false
iex(2)> Anagram.anagram?('hello', 'olleh')
true

Elixir 練習問題 StringsAndBinaries-1

^o^ > iex practice_11_1.exs
Eshell V8.0  (abort with ^G)
Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> ASCII.is_printable('hello')
true
iex(2)> ASCII.is_printable('hello\n')
false