第 1 回: Lua とはなにか, そして, どんな風にプログラムを書くのか?

Lua とは

Lua という名前は, ポルトガル語で [月] を意味する単語.

Lua のドキュメンテーション

Lua 5.1 Reference Manual

Programming in Lua (first edition)

Hello Lua World を実行してみる

hello.lua

1
2
3
4
5
-- hello.lua
-- print 関数は自動的に "\n" を入れることを忘れない
print("Hello Lua World")
print("你好 Lua")
print("こんにちは Lua")

hello.lua の実行し方 1 と 結果は:

[wtopia lua.hajime]$ lua hello.lua
Hello Lua World
你好 Lua
こんにちは Lua

hello.lua の実行し方 2 (インタプリター) と 結果は:

[wtopia lua.hajime]$ lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> =dofile("hello.lua")
Hello Lua World
你好 Lua
こんにちは Lua
>

hello2.lua

1
2
3
4
5
-- hello2.lua
io.write("Hello Lua World") -- "\n" を入れない
print() -- "\n" を自動的に入れる
io.write("こんにちは Lua")
print()

hello2.lua の実行結果は:

[wtopia lua.hajime]$ lua hello2.lua
Hello Lua World
こんにちは Lua

入力された数値を元に計算を行うプログラム

x3.lua

1
2
3
4
5
-- x3.lua

v = io.read()
io.write(v*3)
print()

x3.lua の実行結果は:

[wtopia lua.hajime]$ lua x3.lua
3
9
[wtopia lua.hajime]$ lua x3.lua
4
12

偶数奇数の判別プログラム

even-odd.lua

1
2
3
4
5
6
7
8
-- even-odd.lua
print("input number:")
v = io.read()
if v % 2 == 0 then
   print "the number is even"
else
   print "the number is odd"
end

even-odd.lua の実行結果は:

[wtopia lua.hajime]$ lua even-odd.lua
input number:
100
the number is even
[wtopia lua.hajime]$ lua even-odd.lua
input number:
55
the number is odd

注意: Lua の if 文は, 以下のように記述する:

-- 単純な書き方
if (式) then
  (式が真の時)
end

-- 二分岐
if (式) then
  (式が真の時)
else
  (式が偽の時)
end

-- 多分岐
if (式 1) then
  (式 1 が真の時)
elseif (式 2) then
  (式 2 が真の時)
elseif (式 3 ) then
  (式 3 が真の時)
elseif (式 4) then
  (式 4 が真の時)
else
  (上記の式が全て偽の時)
end

素数を探すプログラム

3 から 100 までの素数を求めるプログラム.

prime.lua

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
-- prime.lua

function is_prime(n)
   local i
   for i = 2, (n-1) do
      if n % i == 0 then
	 return false
      end
   end
   return true
end

-- check prime
for i = 2, 100 do
   if is_prime(i) then
      io.write("["..i.."]")
   end
end

prime.lua の実行結果は:

[wtopia lua.hajime]$ lua prime.lua
[2][3][5][7][11][13][17][19][23][29][31][37][41][43][47][53][59][61][67][71][73][79][83][89][97][wtopia lua.hajime]$

for 文の書式は以下のようになっている:

for (変数) = (開始値), (終了値) do
  (繰り返し文)
end

関数を定義するには以下のようになる:

function 関数名 (引数 1, 引数 2 ...)
  関数の内容
end

もう一つの関数の定義がある.

add.lua

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- 関数の定義 1
function add(a, b)
   return (a + b)
end

-- 関数の定義 2
add = function(a, b) return (a+b) end

print( "10 + 20 = " .. add(10, 20) )
print( "10 + 30 = " .. add(10, 30) )

add.lua の実行結果は:

[wtopia lua.hajime]$ lua add.lua
10 + 20 = 30
10 + 30 = 40

無限ループを作るような場合

偶数, 奇数を判定する.

even-odd2.lua

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-- even-odd2.lua
while true do
   print("Input number:")
   v = io.read()
   if (v == nil) or (v == "") then
      break
   end
   if v % 2 == 0 then
      print("the number is even")
   else
      print("the number is odd")
   end
end

even-odd2.lua の実行結果は:

[wtopia lua.hajime]$ lua even-odd2.lua
Input number:
10
the number is even
Input number:
67
the number is odd
Input number:

[wtopia lua.hajime]$

while 文は次の書式で記述する:

while (式) do
  (式が真の間実行される文)
end