<?xml version="1.0" encoding="utf-8" ?>
<rss version='2.0'><channel><title>Luaプログラミング入門</title
><link>http://karetta.jp/book/lua</link
><description></description
><lastBuildDate>Thu, 18 Sep 2008 20:19:25 +0900</lastBuildDate
><item><title>tostring関数</title
><link>http://karetta.jp/book-node/lua/230815</link
><pubDate>Thu, 18 Sep 2008 20:19:25 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;h4 id=&#39;H-4128e8&#39;&gt;定義
&lt;/h4
&gt;&lt;blockquote&gt;&lt;pre&gt;tostring (e)
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;p&gt;tostring関数はeを文字列に変換する関数です．
&lt;/p
&gt;&lt;pre&gt;hoge = 25
print(&amp;quot;hoge :&amp;quot; .. hoge .. &amp;quot; type :&amp;quot; .. type( hoge ) )
piyo = tostring( hoge )
print(&amp;quot;piyo :&amp;quot; .. piyo .. &amp;quot; type :&amp;quot; .. type(piyo) )
&lt;/pre
&gt;&lt;h5 id=&#39;H-v9awcn&#39;&gt;実行結果
&lt;/h5
&gt;&lt;pre&gt;hoge :25 type :number
piyo :25 type :string
&lt;/pre
&gt;&lt;p&gt;数値から文字列に変換する際は，わざわざtostring関数を
使用しなくても，空の文字列を追加するだけでよいです．
&lt;/p
&gt;&lt;pre&gt;piyo = hoge .. &amp;quot;&amp;quot;
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>tonumber関数</title
><link>http://karetta.jp/book-node/lua/230813</link
><pubDate>Thu, 18 Sep 2008 20:17:48 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;h5 id=&#39;H-4128e8&#39;&gt;定義
&lt;/h5
&gt;&lt;blockquote&gt;&lt;pre&gt;tonumber (e [, base])
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;p&gt;tonumber関数は引数eを数値に変換する関数です．
数値変換が可能な場合は数値を返し，
そうでなければnilを返します．
&lt;/p
&gt;&lt;p&gt;また，baseを指定すると，eをbase進法の数値として変換します．
省略すると，10が自動的に指定されます．
&lt;/p
&gt;&lt;pre&gt;hoge = &amp;quot;25&amp;quot;
print(&amp;quot;hoge :&amp;quot; .. hoge .. &amp;quot; type :&amp;quot; .. type( hoge ) )
piyo = tonumber( hoge )
print(&amp;quot;piyo :&amp;quot; .. piyo .. &amp;quot; type :&amp;quot; .. type(piyo) )
&lt;/pre
&gt;&lt;h5 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h5
&gt;&lt;pre&gt;hoge :25 type :string
piyo :25 type :number
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>type関数</title
><link>http://karetta.jp/book-node/lua/230811</link
><pubDate>Thu, 18 Sep 2008 20:15:39 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;h5 id=&#39;H-4128e8&#39;&gt;定義
&lt;/h5
&gt;&lt;blockquote&gt;&lt;pre&gt;type (v)
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;p&gt;type関数は，データの型を返す関数です．
&lt;/p
&gt;&lt;pre&gt;hoge = nil
print(&amp;quot;hoge : &amp;quot; .. type(hoge))
hoge = 10
print(&amp;quot;hoge : &amp;quot; .. type(hoge))
hoge = true
print(&amp;quot;hoge : &amp;quot; .. type(hoge))
hoge = &amp;quot;Hello&amp;quot;
print(&amp;quot;hoge : &amp;quot; .. type(hoge))
&lt;/pre
&gt;&lt;h5 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h5
&gt;&lt;pre&gt;hoge : nil
hoge : number
hoge : boolean
hoge : string
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>dofile関数</title
><link>http://karetta.jp/book-node/lua/230809</link
><pubDate>Thu, 18 Sep 2008 19:46:40 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;h5 id=&#39;H-4128e8&#39;&gt;定義
&lt;/h5
&gt;&lt;blockquote&gt;&lt;pre&gt;dofile (filename)
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;p&gt;dofile関数はfilenameで指定したファイルを実行する関数です．
例えば以下のようにして使います．
今回は二つのLuaファイル，test.luaとcall.luaにコードを記述しています．
&lt;/p
&gt;&lt;pre&gt;-- call.lua
function testFunc()
        print (&amp;quot;Hello&amp;quot;)
        return &amp;quot;World!&amp;quot;
end
&lt;/pre
&gt;&lt;pre&gt;-- test.lua
dofile(&amp;quot;call.lua&amp;quot;)

hoge = testFunc()
print( hoge )
&lt;/pre
&gt;&lt;h5 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h5
&gt;&lt;pre&gt;Hello
World!
&lt;/pre
&gt;&lt;p&gt;dofileでcall.luaを読み込む事により，test.lua側で
testFunc関数を利用することができます．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>assert関数</title
><link>http://karetta.jp/book-node/lua/230807</link
><pubDate>Thu, 18 Sep 2008 19:23:30 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;h4 id=&#39;H-4128e8&#39;&gt;定義
&lt;/h4
&gt;&lt;blockquote&gt;&lt;pre&gt;assert (v [, message])
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;p&gt;assert関数はvが偽条件ならばエラーを発生させる関数です．
messageにはエラーメッセージを渡します．
エラーメッセージは省略可能です．
&lt;/p
&gt;&lt;pre&gt;hoge = true
assert( hoge, &amp;quot;Error #1&amp;quot;)
hoge = false
assert( hoge, &amp;quot;Error #2&amp;quot;)
&lt;/pre
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;lua51m.exe: test.lua:4: Error #2
stack traceback:
        [C]: in function &amp;#39;assert&amp;#39;
        test.lua:4: in main chunk
        [C]: ?
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>基本ライブラリ</title
><link>http://karetta.jp/book-node/lua/230797</link
><pubDate>Thu, 18 Sep 2008 19:21:06 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;ここでは，基本ライブラリに用意されている関数の一部を紹介します．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>標準ライブラリ</title
><link>http://karetta.jp/book-node/lua/230316</link
><pubDate>Thu, 18 Sep 2008 19:20:43 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;Luaには標準関数と呼ばれるものが存在します．
これは，よく使われる処理があらかじめ関数として用意されています．
例えばprint関数やio.read関数などが標準関数にあたります．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>無名関数</title
><link>http://karetta.jp/book-node/lua/230314</link
><pubDate>Mon, 13 Apr 2009 16:28:54 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;名前無し関数を作成することも可能です．
例えば次のようなコードを書くことができます．
&lt;/p
&gt;&lt;pre&gt;function createSquare()
        return function(x)
                return x*x
        end
end

square = createSquare()
print(&amp;quot;10 * 10 is &amp;quot; .. square(10) )
&lt;/pre
&gt;&lt;p&gt;createSquare関数は戻り値にx*xを行う関数を返しています．
&lt;/p
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;10 * 10 is 100
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>関数中に関数を定義する</title
><link>http://karetta.jp/book-node/lua/230312</link
><pubDate>Thu, 18 Sep 2008 19:24:46 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;Luaでは関数内に関数を定義することも可能です．
&lt;/p
&gt;&lt;pre&gt;function func(x)
        local function get()
                return x
        end
        
        local function add(value)
                x = x + value
        end
        return get, add
end

firstGetValue, firstAddValue = func(10)
secondGetValue, secondAddValue = func(30)

print(&amp;quot;first value : &amp;quot; .. firstGetValue() )
print(&amp;quot;second value : &amp;quot; .. secondGetValue() )

firstAddValue( 15 )
secondAddValue( 20 )

print(&amp;quot;first value : &amp;quot; .. firstGetValue() )
print(&amp;quot;second value : &amp;quot; .. secondGetValue() )
&lt;/pre
&gt;&lt;p&gt;func関数はgetとadd関数を戻り値として返しています．
ここでlocalという新しいキーワードが登場しました．
このlocalについては有効範囲の章で詳しく説明します．
簡単に説明しておきますと，localというキーワードを付けることで
ローカル変数（またはローカル関数）を作成することができます．
要は，get関数もadd関数もfunc関数内からでしか呼び出せないと
いうことです．
&lt;/p
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;first value : 10
second value : 30
first value : 25
second value : 50
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>変数に関数を代入する</title
><link>http://karetta.jp/book-node/lua/230310</link
><pubDate>Thu, 18 Sep 2008 19:25:18 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;Luaの変数にはどんな値でも代入することができます．
たとえ関数であろうとも代入が可能です．
例えば次のようなことも可能です．
&lt;/p
&gt;&lt;pre&gt;function sum(x, y)
        return x + y
end

function mul(x, y)
        return x * y
end

hoge = sum
print(&amp;quot;hoge is &amp;quot; .. type(hoge) );
print(&amp;quot;10 + 20 is &amp;quot; .. hoge(10, 20) )

hoge = mul
print(&amp;quot;10 * 20 is &amp;quot; .. hoge(10, 20) )
&lt;/pre
&gt;&lt;p&gt;type関数は現在の変数の型を調べるものでしたね．
hogeにはsum関数やmul関数を代入しています．
そして，hogeを使い関数にアクセスすることもできます．
C言語をご存知の方は関数ポインタのようなことができると
思ってください．
&lt;/p
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;hoge is function
10 + 20 is 30
10 * 20 is 200
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>何も返さない関数</title
><link>http://karetta.jp/book-node/lua/230308</link
><pubDate>Mon, 13 Apr 2009 16:30:01 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;戻り値のない関数，つまり何も返さない関数を作ることもできます．
その場合returnを書かなければ良いのです．
&lt;/p
&gt;&lt;pre&gt;function func()
        print(&amp;quot;関数が呼び出されました&amp;quot;)
end

func()
&lt;/pre
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;関数が呼び出されました
&lt;/pre
&gt;&lt;p&gt;また，明示的に戻り値が無いことを示すため，returnだけを書くこともできます．
&lt;/p
&gt;&lt;pre&gt;function func()
        print(&amp;quot;関数が呼び出されました&amp;quot;)
        return
end

func()
&lt;/pre
&gt;&lt;p&gt;上記の二つのコードは全く同じものです．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>関数の戻り値</title
><link>http://karetta.jp/book-node/lua/230306</link
><pubDate>Thu, 18 Sep 2008 19:26:33 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;関数には戻り値と呼ばれるものが存在しています．
前節のプログラムと図を見てください．
&lt;/p
&gt;&lt;p&gt;&lt;a href=&#39;http://karetta.jp/images/227310/Fig01.PNG&#39;&gt;&lt;img src=&#39;http://karetta.jp/images/227310/Fig01.PNG&#39; style=&#39;margin:0 0 5px 0;padding:4px;border:1px solid #ccc;float:none&#39; /&gt;&lt;/a
&gt;
&lt;/p
&gt;&lt;p&gt;returnは値を関数を呼び出した側に返す命令です．
よって，x + y の計算結果を呼び出し元に返しています．
つまり，変数resultには計算結果が代入されます．
&lt;/p
&gt;&lt;p&gt;Luaは複数の値を戻り値として返すことができます．
例えば，次のようなことができます．
&lt;/p
&gt;&lt;pre&gt;function func()
        return 10, 20
end

hoge, piyo = func()

print(hoge, piyo)
&lt;/pre
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;10      20
&lt;/pre
&gt;&lt;p&gt;hogeには10が，piyoには20が代入されます．
&lt;/p
&gt;&lt;p&gt;では，次のようなコードを書いた場合どうなるでしょうか．
&lt;/p
&gt;&lt;pre&gt;function func()
        return 10, 20
end

hoge = func()

print(hoge, piyo)
&lt;/pre
&gt;&lt;p&gt;この場合，第2の戻り値である20は使われず消滅します．
&lt;/p
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;10      nil
&lt;/pre
&gt;&lt;p&gt;また，次のようなコードを書いた場合はどうでしょうか．
&lt;/p
&gt;&lt;pre&gt;function func()
        return 10
end

piyo = 20

hoge, piyo = func()

print(hoge, piyo)
&lt;/pre
&gt;&lt;p&gt;第2の戻り値はありません．
この場合，piyoにはnilが代入されます．
piyoは20ではないので注意してください．
&lt;/p
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;10      nil
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>関数の作り方</title
><link>http://karetta.jp/book-node/lua/230304</link
><pubDate>Thu, 18 Sep 2008 19:27:27 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;では，関数を作ってみましょう．
関数は次のように定義します．
&lt;/p
&gt;&lt;h4 id=&#39;H-50pg9w&#39;&gt;書式
&lt;/h4
&gt;&lt;blockquote&gt;&lt;pre&gt;function 関数名( 引数 )
    処理
end
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;p&gt;ここで，二つの値を引数として渡し，その和を求める関数を
作ってみましょう．
&lt;/p
&gt;&lt;pre&gt;function sum(x, y)
        return x + y
end

hoge = 10
piyo = 20

result = sum( hoge, piyo )
print( hoge .. &amp;quot; + &amp;quot; .. piyo .. &amp;quot; = &amp;quot; .. result )
&lt;/pre
&gt;&lt;h4 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h4
&gt;&lt;pre&gt;10 + 20 = 30
&lt;/pre
&gt;&lt;p&gt;まずsum関数を使う前に，関数を定義しておかなければならない事に注意してください．
関数には好きな名前をつけてください．ただし，
すでに使われている関数名や変数名は使わないでください．
例えば，printなどの名前をつけないでください．
関数命名のルールは変数の場合と同じです．
&lt;/p
&gt;&lt;h4 id=&#39;H-swsa0x&#39;&gt;C言語との違い
&lt;/h4
&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;プロトタイプ宣言は無い
&lt;/li
&gt;&lt;/ul
&gt;&lt;/blockquote
&gt;&lt;p&gt;さて，関数を呼び出す際に sum( hoge, piyo ) としました．
関数を呼び出す際には引数と呼ばれるものを渡します．
この引数とはどういったものでしょうか．
&lt;/p
&gt;&lt;p&gt;下図を使ってその説明をします．
&lt;/p
&gt;&lt;p&gt;&lt;a href=&#39;http://karetta.jp/images/227310/Fig01.PNG&#39;&gt;&lt;img src=&#39;http://karetta.jp/images/227310/Fig01.PNG&#39; style=&#39;margin:0 0 5px 0;padding:4px;border:1px solid #ccc;float:none&#39; /&gt;&lt;/a
&gt;
&lt;/p
&gt;&lt;p&gt;上図は引数の様子を示した図です．
呼び出した側の引数を実引数といい，呼び出された側の
引数を仮引数といいます．このとき，実引数の値が仮引数の値にコピーされます．
つまり，
&lt;/p
&gt;&lt;pre&gt;function func(x, y)
        x = 10
        y = 20
end

hoge = 12
piyo = 22
func( hoge, piyo )

print(hoge, piyo )
&lt;/pre
&gt;&lt;p&gt;としても，x,y はhoge, piyoのコピーなので，中身をいくら書き換えても
呼び出しもとのhoge, piyoには影響を及ぼしません.
&lt;/p
&gt;&lt;p&gt;引数に関して，もしかしたら何も受け取る必要が無い場合があるかもしれません．
そういった場合は，引数の中は空にしておきます．
&lt;/p
&gt;&lt;p&gt;関数の戻り値に関しては次節で説明します．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>関数について</title
><link>http://karetta.jp/book-node/lua/230302</link
><pubDate>Mon, 15 Sep 2008 21:56:44 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;Luaに限らず，多くのプログラミング言語に欠かせない概念の一つとして
関数というものが存在します．
実は今まで関数を何回も使っていました．
例えばprintですが，これは関数です．io.readも関数です．
関数とはいくつもの命令を集め１つの塊として定義したものです．
同じ処理を何回も行いたい場合は，関数を１つ定義して呼び出すだけでよいです．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>演習問題</title
><link>http://karetta.jp/book-node/lua/230150</link
><pubDate>Mon, 15 Sep 2008 21:43:06 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;h4 id=&#39;H-1w7ohmv&#39;&gt;問題1
&lt;/h4
&gt;&lt;p&gt;キーボードから数字を受け取り,その絶対値を表示するプログラムを作成せよ.
絶対値とは数字0からの距離のことである．
例えば，-7ならば0からの距離は7なので絶対値は7である．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>足し算，引き算を行うプログラム</title
><link>http://karetta.jp/book-node/lua/230148</link
><pubDate>Mon, 15 Sep 2008 21:42:09 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;仕様
&lt;/p
&gt;&lt;blockquote&gt;&lt;p&gt;利用者の選択により足し算,引き算ができるプログラムを作成せよ．
&lt;/p
&gt;&lt;/blockquote
&gt;&lt;pre&gt;print(&amp;quot;1 : 足し算を行う&amp;quot;)
print(&amp;quot;2 : 引き算を行う&amp;quot;)
io.write(&amp;quot;番号を入力してください :&amp;quot;)
select = io.read()

io.write(&amp;quot;1番目の数 :&amp;quot;)
hoge = io.read()
io.write(&amp;quot;2番目の数 :&amp;quot;)
piyo = io.read()

if( select == &amp;quot;1&amp;quot; ) then
        print( hoge .. &amp;quot; + &amp;quot; .. piyo .. &amp;quot; = &amp;quot; .. hoge + piyo )
elseif( select == &amp;quot;2&amp;quot; ) then
        print( hoge .. &amp;quot; - &amp;quot; .. piyo .. &amp;quot; = &amp;quot; .. hoge - piyo )
end
&lt;/pre
&gt;&lt;p&gt;注意点が一つあります．
それは，io.read関数で読み取ることができるのは文字です．
よって，selectはString型となっています．
なので，
&lt;/p
&gt;&lt;pre&gt;if( select == 1 ) then
&lt;/pre
&gt;&lt;p&gt;とはできません．
&lt;/p
&gt;&lt;p&gt;実行結果
&lt;/p
&gt;&lt;pre&gt;1 : 足し算を行う
2 : 引き算を行う
番号を入力してください :1
1番目の数 :15
2番目の数 :10
15 + 10 = 25
&lt;/pre
&gt;&lt;p&gt;実行結果
&lt;/p
&gt;&lt;pre&gt;1 : 足し算を行う
2 : 引き算を行う
番号を入力してください :2
1番目の数 :15
2番目の数 :10
15 - 10 = 5
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>文字コード表を表示するプログラム</title
><link>http://karetta.jp/book-node/lua/230146</link
><pubDate>Mon, 15 Sep 2008 21:40:40 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;仕様
&lt;/p
&gt;&lt;blockquote&gt;&lt;p&gt;0～255までの文字コードを表示するプログラムを作成せよ．
10進法の値，16進法の値，文字を表示することとする．
&lt;/p
&gt;&lt;pre&gt;0 0 
1 1 

（略)

65 41 A
66 42 B

（略）
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;pre&gt;for hoge = 0, 255 do
        print( string.format(&amp;quot;%3d %3x %3c&amp;quot;, hoge, hoge, hoge) )
end
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>九九表を作成するプログラム</title
><link>http://karetta.jp/book-node/lua/230144</link
><pubDate>Mon, 15 Sep 2008 21:39:12 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;仕様
&lt;/p
&gt;&lt;blockquote&gt;&lt;p&gt;九九を表示するプログラムを作成せよ．
九九表は以下のように表示させる．
&lt;/p
&gt;&lt;pre&gt;  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
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;pre&gt;for i = 1, 9 do
        for j = 1, 9 do
                io.write( string.format(&amp;quot;%3d&amp;quot;, i*j) )
        end
        io.write(&amp;quot;\n&amp;quot;)
end
&lt;/pre
&gt;&lt;p&gt;io.write関数はprint関数と同じ機能を果たします．
ただし，文章の最後に改行が自動付加されません．
&lt;/p
&gt;&lt;p&gt;string.formatの中に%3dというものを使いましたが，
これは3文字分のスペースを確保して表示するという
意味です.このようにすると綺麗に表示することができます．
5文字分のスペースを確保したい場合は,%5dとすればよいです．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>Luaに存在しない制御文</title
><link>http://karetta.jp/book-node/lua/230190</link
><pubDate>Mon, 15 Sep 2008 05:16:17 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;多くのプログラミング言語には存在していても，
Luaには存在していない制御文があります．
&lt;/p
&gt;&lt;p&gt;例えばswitch構文はLuaにはありません．
switchはテーブルを使うことで表現できますが，
ここではその方法は割愛します．
&lt;/p
&gt;&lt;p&gt;また，繰り返し処理中で使用するcontinue文も存在しません．
&lt;/p
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
><item><title>breakを使ったループの脱出</title
><link>http://karetta.jp/book-node/lua/230140</link
><pubDate>Thu, 18 Sep 2008 19:29:04 +0900</pubDate
><description>&lt;div&gt;&lt;node-set&gt;&lt;p&gt;繰り返し処理を実行している間にbreak文を使うと，
いつでもループから脱出することができます．
例えば次のようなプログラムを書いたとします．
&lt;/p
&gt;&lt;pre&gt;for i = 0, 10 do
        print( &amp;quot;iの値:&amp;quot; .. i )
        if ( i == 5 ) then
                break
        end
end
print(&amp;quot;脱出&amp;quot;)
&lt;/pre
&gt;&lt;h5 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h5
&gt;&lt;pre&gt;iの値:0
iの値:1
iの値:2
iの値:3
iの値:4
iの値:5
脱出
&lt;/pre
&gt;&lt;p&gt;breakは必ずブロックの最後でしか使うことができません．
ブロックの最後とは，具体的に以下のような場所です．
&lt;/p
&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;endの手前
&lt;/li
&gt;&lt;li&gt;repeat - until の untilの手前 等
&lt;/li
&gt;&lt;/ul
&gt;&lt;/blockquote
&gt;&lt;p&gt;上記の場所以外ではbreakは定義できません．
しかしデバッグ中に，例えば処理の途中でbreakしたい場合があるかもしれません．
次のようなコードがあったとします．
&lt;/p
&gt;&lt;pre&gt;for i = 0, 10 do
        print(&amp;quot;なにか処理&amp;quot;)
        --本当はここでbreakしたい
        print(&amp;quot;別の処理&amp;quot;)
end
print(&amp;quot;脱出&amp;quot;)
&lt;/pre
&gt;&lt;p&gt;まあ，このようなコードを書くことは普段ないとは思いますが．
&lt;/p
&gt;&lt;p&gt;とにかく，途中でbreakしたい場合は，ブロックをforの途中に作ればよいのです．
ブロックを作るには，do - endを使用します．
&lt;/p
&gt;&lt;h5 id=&#39;H-50pg9w&#39;&gt;書式
&lt;/h5
&gt;&lt;blockquote&gt;&lt;pre&gt;do
    処理
end
&lt;/pre
&gt;&lt;/blockquote
&gt;&lt;p&gt;よって，次のように書き直せば，処理の途中でbreakが行えます．
&lt;/p
&gt;&lt;pre&gt;for i = 0, 10 do
        print(&amp;quot;なにか処理&amp;quot;)
        do
                break;
        end
        print(&amp;quot;別の処理&amp;quot;)
end
print(&amp;quot;脱出&amp;quot;)
&lt;/pre
&gt;&lt;h5 id=&#39;H-lwq16e&#39;&gt;実行結果
&lt;/h5
&gt;&lt;pre&gt;なにか処理
脱出
&lt;/pre
&gt;&lt;/node-set
&gt;&lt;/div
&gt;</description
></item
></channel
></rss
>