2011-06-01から1ヶ月間の記事一覧

オブジェクト指向のサンプル

Lua

Foo = {} function Foo:meth1() print(self) end function Foo:new() return setmetatable({}, {__index = Foo}) end foo = Foo:new() foo:meth1() --実行結果 table: 003CB908 上記はオブジェクト指向の最小のサンプル。第一引数にselfを渡す必要ないのであ…

メモ

Lua

ラシウラ: PythonからLuaを呼ぼう (http://d.hatena.ne.jp/bellbind/20090526)

なぜ関数型言語は普及しないか (2)

前回の記事の続編。色々反響があったみたいだが、最も気になったのは、「手続き型と関数型はパラダイムが違うのに、なぜ1対1に対応させる必要があるのか」ということ。 私の考え方をもう少し補足説明。私も手続き型と関数型を1対1に対応させるのが正解と…

なぜ関数型言語は普及しないか

言語を利用するための条件は以下の3つになると思う。つまり、言語が普及するための条件とも考えられる。 使用するための必要条件を満たしているか その言語を使用するメリットがあるか デメリットはないか 例えば、D言語はシステム言語であるので、使用する…

メモ化

Lua

アッカーマン関数+メモ化をいろいろな言語で (http://d.hatena.ne.jp/yppp/20101120/1290228056) function varg_tostring(...) local s = select(1, ...) for n = 2, select('#', ...) do s = s..","..select(n,...) end return s end function memoize(f) …

テーブルのキーにテーブルを入れる

Lua

Luaでは、テーブルは同一判定であって、同値判定ではない。すなわち、 {1,2,3} == {1,2,3} --> false となる。なので、テーブルをテーブルのキーにすることは出来ない。 では、どうすれば良いのかと言うと、テーブルを文字列化してキーとすれば良い。 functi…

LuaCOMの例

Lua

Excelのセルに値を書き込んで、読みだす例。 require 'luacom' excel = luacom.CreateObject('Excel.Application') excel.Visible = true local book = excel.Workbooks:Add() local sheet = book.Worksheets(1) sheet.Cells(1, 1).Value2 = 99 local val = …

package.loadlib() vs alien

Lua

package.loadlib()でのWin32API呼び出しは、うまくいかなかった。恐らくWin32APIの呼び出し規約がstdcallだからだろう。しかし、呼び出し規約がcdeclのprintfを呼び出しても、文字化けしてうまくいかなかった。型を指定していないからだろうか。alienを使用…

assert関数

Lua

assert()は、第一引数にboolean、第二引数にオプションでエラーメッセージを取る。呼び出しが成功した場合は、関数の戻り値を返す。例えば、以下のio.open()はエラーの場合、第一引数にnil、第二引数にエラーメッセージを返す。なので、以下の呼び出し方は定…