Lua

Lua で不動点コンビネータ

Lua

たまには Lua も書かないと忘れてしまいそうなので,久しぶりに Lua を書いてみた. お題は,最近の日記でも扱った,不動点コンビネータ. 散々既出だろうし,新規性は全くないけど,まぁ個人の blog だし その辺りは勘弁してください,ってことで. さて,…

Lua にタプルを実装したと思ったらリストだった。

Lua

Lua は素晴らしい言語なのですが、現実の言語である以上、使っていくと色々と不満点が出てきます。 local として宣言してない変数に触ると、暗黙のうちにグローバル変数として扱われる strict.lua を使っても、苦し紛れの解決でしかない 実行時チェックなの…

東方弾幕風の乱数について

東方弾幕風の乱数生成関数 rand( min, max ) は、 min 以上 max 以下の乱数を返す関数です: let x = rand( 0, 1 )例えばこう書いた場合、 x の値の範囲は 0 一方で、多くのプログラミング言語に用意されている一様な実数乱数の分布は、上端の値を含みません…

東方弾幕風のタスクシステムを Lua で再現する

そろそろ半年ほど前に提唱した BarrageLL の制作を再開していきたいと思います: 東方弾幕風の不満点、およびその解決策 - 野良C++erの雑記帳 弾幕記述フレームワーク BarrageLL 開発開始 - 野良C++erの雑記帳実は最近、ちょこちょこ github で Lua 自体のち…

文字列への強制変換

Lua

Lua では数値と文字列は相互に変換可能です。 http://ideone.com/zvnjL print( math.sin("1.0") ) -- OK print( string.byte(0) ) -- OK. "0" の文字コード(ASCIIの場合 48 ) これは通常、細かいことを気にしなくていいので割と便利なわけですが、 type 関…

newproxy

Lua

Lua のユーザデータは、基本的に Lua を組み込む側で作るもので、純粋な Lua では使えません。 まぁ無くてもテーブルを使えばいいだけなのですが、テーブルだとオーバースペックだったり、 あるいは rawget/rawset によって破壊されてしまう恐れがあり、少し…

間違った分割統治法

Lua

多値の結合 - 野良C++erの雑記帳 の実装コードが非効率的だったので、訂正します。 -- 補助関数 -- 引数をそのまま帰す function id(...) return ... end -- 引数の数を数える do local select = select function count(...) return select( "#", ... ) end …

多値の結合

Lua

Lua は、関数から複数の値(多値)を返すことの出来る言語です。 function f() return 1, 2, 3 end print( f() ) -- 1 2 3 そんな Lua を使っていると、割としばしば、「多値を結合したい」と思う場面に出くわします。 例えば…例えば、えっと、とっさに例が…

可変個引数処理のパフォーマンス比較

Lua

Lua で可変個引数を処理する方法には、主に三通りあります。 すなわち、再帰によって行う方法、テーブルを作る方法、標準関数selectを使う方法です: -- 再帰版 do local function add_impl_( x, y, ... ) if y == nil then return x end return add_impl_( …

何物でもない値

Lua

Lua でテーブルを使ったコード書いてると、しばしば、 「特定のフィールドを予め確保しておきたい」状況に出くわします。 例えば __index や __newindex をカスタマイズした場合に、 それらを無視してフィールドにアクセスする場合、普通は rawget/rawset を…

インデックスアクセスと rawget/rawset は、どちらが高速か?

Lua

以下のスクリプトを書いてテストしてみた。 -- rawget と ls[k] および -- rawset と ls[k] = v は、どっちが高速か? -- 関数 f を n 回実行するのにかかった時間を測定する do local clock = os.clock function time( n, f, ... ) local oldtime = clock()…

関数の定義における落とし穴(解答編)

関数の定義における落とし穴(出題編) - 野良C++erの雑記帳 に対する解答例です。

関数の定義における落とし穴(出題編)

以下の Lua 関数 append は、第一引数として渡された配列形式のテーブルに、 第ニ引数以下で渡された配列形式のテーブルを全て追加するものである:http://ideone.com/SGfpS function append( t, t1, ... ) if t1 == nil then return end local n = #t for _…

Lua で using ディレクティブみたいなもの

Lua

最近 Lua でいろいろ書いてるのですが、 Lua の不満な点として、 標準ライブラリが全体的に最低限の機能しか無い点が挙げられます。 いや、 Lua という言語のコンセプトから考えると、これば別に不満点ではないですが、 それでも、ちょっと便利に使おうと思…

C++でデストラクタを呼ばなくていい条件

参考: デストラクタを呼ばずに再構築 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ C++ では、動的に確保したメモリ領域にオブジェクトを構築した場合、 確保した領域を解放する前に、デストラクタを呼び出す必要があります: // 何らかの…

と思ったけど

明らかな異常系以外で例外に頼らなければいけない状況は変だ、と思い直した。 気軽にぽんぽん例外を投げるような設計は、どうなのだろう、と。 その辺は言語の文化も関わってくるけれど、例えばC++だと、例外は基本的に「例外的な事情」がある時しか投げない…

Lua に例外処理が欲しい

Lua

とても欲しい。 pcall と error で似たようなことはできるけど、やはり不十分だし。

BarrageLL の目指すべき場所とか

ひきこもりにっき。@はてだらからご意見を頂きました。ありがたい事です。 とりあえず前回の記事ではいろいろと足りない点が多かったので、頂いた意見にコメントする形で補足してみようと思います。 スクリプトフォーマットはコア部分にするとのことだけど…

弾幕記述フレームワーク BarrageLL 開発開始

東方弾幕風の不満点、およびその解決策 - 野良C++erの雑記帳 で発表したプロジェクトを、そろそろ本格的に動かしたいです。 というわけで、とりあえず、開発場所だけでも確保してみました。 http://github.com/gintenlabo/BarrageLL 名前は BulletML をリス…

初心者向けの記事というのは、もっとあっていい。

http://d.hatena.ne.jp/nagoya313/20100314/1268536979 というわけで、超期待。 僕の Lua 弾幕プロジェクトも、そろそろ具体的に動き出すべきですね。

東方弾幕風の不満点、およびその解決策

東方のファンをやっていると、時々「こんな弾幕が有ったら面白くね?」と思ったりします。 そんな時、 東方弾幕風 を使うと気軽に弾幕を製作できて便利なのですが、不満点が幾つか。 この東方弾幕風、スクリプトで使われている言語が、弾幕風オリジナルの言…

Lua スクリプトによるゲーム開発、はぢめました

冬コミに向け本格的なゲーム製作をするにあたって、常々思っていた「なんかスクリプトっぽい言語を組み込めると面白いなぁ」的アイデアが実現できそうなので報告。 使う言語は、候補としては Python や Perl 、 Ruby なんかがあったわけですが、今回は Lua …