llama-2 で elixir を学ぶ　（その3）掛け算九九の表を作成

こちらと同じことを [llama-2](https://replicate.com/meta/llama-2-13b-chat) で行いました。

## Python のプログラム

```py:multiplation.py
#! /usr/bin/python
#
import sys
#
sys.stderr.write("*** 開始 ***\n")

for it in range(1,10):
	for jt in range(1,10):
		kt = it * jt
		print("%2d" % kt,end = " ")
	print()

sys.stderr.write("*** 終了 ***\n")
```

## llama-2 が作成したプログラム

```elixir:ex03.exs
#! /usr/bin/elixir

import System

System.err.write("*** 開始 ***\n")

for it in 1..10 do
  for jt in 1..10 do
    kt = it * jt
    IO.puts("%2d" % kt, space: " ")
  end
end

System.err.write("*** 終了 ***\n")
```

実行結果

```text
$ ./ex03.exs 
** (SyntaxError) invalid syntax found on ex03.exs:10:19:
    error: syntax error before: '%'
    │
 10 │     IO.puts("%2d" % kt, space: " ")
    │                   ^
    │
    └─ ex03.exs:10:19
    (elixir 1.16.2) lib/code.ex:1489: Code.require_file/2
```

## 修正

sed で修正

```text:sed01
s/import System//
s/System.err.write/IO.puts :stderr,/
s/ in / <- /
```

```bash
sed -f sed01 ex03.exs > ex0301.exs
```

```exs:import System
#! /usr/bin/elixir

IO.puts :stderr,("*** 開始 ***\n")

for it <- 1..10 do
  for jt <- 1..10 do
    kt = it * jt
    IO.puts("%2d" % kt, space: " ")
  end
end

IO.puts :stderr,("*** 終了 ***\n")
```

## 更に手修正

次を

```text
IO.puts("%2d" % kt, space: " ")
```

次に変換する

```text
:io.format("~2s ",[Integer.to_string(kt)])
```

```exs:ex0302.exs
#! /usr/bin/elixir

IO.puts :stderr,("*** 開始 ***\n")

for it <- 1..10 do
  for jt <- 1..10 do
    kt = it * jt
    :io.format("~2s ",[Integer.to_string(kt)])
#    IO.puts("%2d" % kt, space: " ")
  end
end

IO.puts :stderr,("*** 終了 ***\n")
```

実行結果

```text
$ ./ex0302.exs 
*** 開始 ***

 1  2  3  4  5  6  7  8  9 10  2  4  6  8 10 12 14 16 18 20  3  6  9 12 15 18 21 24 27 30  4  8 12 16 20 24 28 32 36 40  5 10 15 20 25 30 35 40 45 50  6 12 18 24 30 36 42 48 54 60  7 14 21 28 35 42 49 56 63 70  8 16 24 32 40 48 56 64 72 80  9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 10 *** 終了 ***
 ```

 改行を入れる

 ```exs:ex0303.exs
 #! /usr/bin/elixir

IO.puts :stderr,("*** 開始 ***\n")

for it <- 1..10 do
  for jt <- 1..10 do
    kt = it * jt
    :io.format("~2s ",[Integer.to_string(kt)])
#    IO.puts("%2d" % kt, space: " ")
  end
  IO.puts ""
end

IO.puts :stderr,("*** 終了 ***\n")
```

実行結果

```text
$ ./ex0303.exs 
*** 開始 ***

 1  2  3  4  5  6  7  8  9 10 
 2  4  6  8 10 12 14 16 18 20 
 3  6  9 12 15 18 21 24 27 30 
 4  8 12 16 20 24 28 32 36 40 
 5 10 15 20 25 30 35 40 45 50 
 6 12 18 24 30 36 42 48 54 60 
 7 14 21 28 35 42 49 56 63 70 
 8 16 24 32 40 48 56 64 72 80 
 9 18 27 36 45 54 63 72 81 90 
10 20 30 40 50 60 70 80 90 10 
*** 終了 ***
```

ループの回数を修正

```exs:ex0304.exs
#! /usr/bin/elixir

IO.puts :stderr,("*** 開始 ***\n")

for it <- 1..9 do
  for jt <- 1..9 do
    kt = it * jt
    :io.format("~2s ",[Integer.to_string(kt)])
#    IO.puts("%2d" % kt, space: " ")
  end
  IO.puts ""
end

IO.puts :stderr,("*** 終了 ***\n")
```

実行結果

```text
$ ./ex0304.exs 
*** 開始 ***

 1  2  3  4  5  6  7  8  9 
 2  4  6  8 10 12 14 16 18 
 3  6  9 12 15 18 21 24 27 
 4  8 12 16 20 24 28 32 36 
 5 10 15 20 25 30 35 40 45 
 6 12 18 24 30 36 42 48 54 
 7 14 21 28 35 42 49 56 63 
 8 16 24 32 40 48 56 64 72 
 9 18 27 36 45 54 63 72 81 
*** 終了 ***
```