6
2

More than 3 years have passed since last update.

Erlangで湯婆婆を実装してみる

Last updated at Posted at 2020-11-14

はじめに

0. 準備

  • まずはErlangをインストールしましょう
  • 私はasdfを使ってインストールしました
  • 手前味噌な記事ですがインストールなどをご参照ください

1. プログラムを書く

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().
  • :tada::tada::tada:

名前を入力しない

$ 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().
  • 何も入力しない場合にエラーになってしまう件は本家と同じくです :thumbsup:

Wrapping Up :lgtm: :qiita-fabicon: :lgtm:

  • Elixirを書いているときに、いつもお世話になっています!
  • とにかくErlangで書いてみました
  • 感覚的なものですが、硬派という言葉がぴったりの印象を持ちました
    • を感じさせてくれる言語です
  • Enjoy Erlang !!! :rocket::rocket::rocket:

  1. Elixirの文法といいますか書き味は、Rubyによく似ています 

  2. すみません、オリジナルがどこにあるのかわかっていません 

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2