はじめに
-
@Nemesis さんのJavaで湯婆婆を実装してみるを拝見しまして、私はErlangでやってみようとおもいました
-
Erlangは
23.0.1
を使いました
-
Erlangは
- Elixirは、2019/01/25(金)に行われたkokura.ex#1:小倉Elixirコミュニティ発足からの付き合いなのですが、Erlangを書いてみるのははじめてです
- ということで、私と同じようにElixirは触ったことあるけど、Erlangはたまに
:math.sqrt/1
等をElixirから使ったことがあるだけで、ほとんどその存在を意識したことがない方に読んでいただけると一番理解していただける内容ではないかとおもっております - もちろん、令和のHello World!としてもお読みいただけるとおもいます
- 私はこれまで以下の湯婆婆記事を書きました
- 2020/11/14(土)に開催されたkokura.ex#15:Elixirもくもく会~入門もあるよ での成果です
- @im_miolab さん、ありがとうございます!
0. 準備
1. プログラムを書く
- 拡張子は
.erl
です - 公式の2 Sequential Programmingを主として参考にしながら書いてみました
-
名前を奪うは、
erlang list random
で検索をして出てきたPick a random element from a listを参考にしました
yubaba.erl
-module(yubaba).
-export([main/0]).
main() ->
InName = io:get_line("契約書だよ。そこに名前を書きな。\n"),
Name = string:trim(InName),
io:format("フン。~tsというのかい。贅沢な名だねぇ。\n", [Name]),
NewName = lists:nth(rand:uniform(length(Name)), Name),
io:format("今からお前の名前は~tsだ。いいかい、~tsだよ。分かったら返事をするんだ、~ts!!\n", [[NewName], [NewName], [NewName]]).
- Elixirに慣れている方であれば、雰囲気で感じ取れるのではないでしょうか
2. 実行
-
erl
コマンドを使います
名前を入力する
$ erl
Erlang/OTP 23 [erts-11.0.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Eshell V11.0.1 (abort with ^G)
1> c('yubaba').
{ok,yubaba}
2> yubaba:main().
契約書だよ。そこに名前を書きな。
山田太郎
フン。山田太郎というのかい。贅沢な名だねぇ。
今からお前の名前は太だ。いいかい、太だよ。分かったら返事をするんだ、太!!
ok
3> halt().
名前を入力しない
$ erl
Erlang/OTP 23 [erts-11.0.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Eshell V11.0.1 (abort with ^G)
1> c('yubaba').
{ok,yubaba}
2> yubaba:main().
契約書だよ。そこに名前を書きな。
フン。というのかい。贅沢な名だねぇ。
** exception error: no function clause matching rand:uniform_s(0,
{#{bits => 58,jump => #Fun<rand.3.47293030>,
next => #Fun<rand.0.47293030>,type => exsss,
uniform => #Fun<rand.1.47293030>,
uniform_n => #Fun<rand.2.47293030>},
[114110547653821498|245986615844275301]}) (rand.erl, line 326)
in function rand:uniform/1 (rand.erl, line 299)
in call from yubaba:main/0 (yubaba.erl, line 8)
3> halt().
- 何も入力しない場合にエラーになってしまう件は本家と同じくです