OCamlの練習

4けたの数について、それぞれの位の数字を大きいじゅんにならべた数から小さいじゅんにならべた数をひくという計算を行います。1974 について、この計算を 100 回行った答えを書きなさい。 http://d.hatena.ne.jp/cooldaemon/20120603/1338705617 上の問題…

LuaでPythonのrange関数のようなものを作る

Lua

Pythonのrange関数に似た関数をLuaで作成してみます。 function range(n) local i = 0 return function() if i >= n then return nil end local ret = i i = i + 1 return ret end end function main() for i in range(5) do print(i) end end main() 実行結…

zip関数

Lua

Luaでzip関数を作成してみました。 function zip(xs, ys) local i = 1 return function() x = xs[i] y = ys[i] if x and y then i = i + 1 return x, y else return nil end end end function main() for a, b in zip({1,2}, {3,4,5}) do print(a, b) end en…

Luaのlocal function

Lua

function main() function test() print("test") end test() end main() test() 実行結果です。 test testtestがmainの外側から見えてしまっています。関数内でローカル関数を定義する場合は、local functionを使います。 function main() local function te…

「失敗に学ぶこと」を読んで

Lua

失敗に学ぶことを読んで、Luaだとどうなるか確認してみます。 function main() local t = {} for i = 1, 3 do t[#t + 1] = function() print("call", i) end end for i = 1, #t do t[i]() end end main() 実行結果です。 call 1 call 2 call 3お、ちゃんと値…

テーブルのソート

Lua

function main() t = { "foo", "bar", "baz", "hoge" } print(table.concat(t, " ")) table.sort(t) print(table.concat(t, " ")) table.sort(t, function(a, b) return a > b end) print(table.concat(t, " ")) end main() 実行結果です。 foo bar baz hoge…

Juliaのmap関数

map関数で、文字列を数値のリストに変換しようと思ったのだけどエラー(type error)になる。 型変換が入るとダメなのだろうか。 ~ $ julia _ _ _ _(_)_ | (_) | (_) (_) | _ _ _| |_ __ _ | A fresh approach to technical computing | | | | | | |/ _` | | |…

Luaの真偽値

Lua

Luaでは、falseとnilが偽となり、それ以外の値は全て真です。 function test(x) if x then print("true", x) else print("false", x) end end function main() tab = { -1, 0, 1, "", "string", {}, { 1 }, { test=2 }, main, true, false, } for i = 1, #ta…

Luaのgoto文

Lua

Lua 5.2からgoto文が入りました。 function main() for i = 1,10 do for j = 1,10 do if i == 1 and j == 3 then goto exit end print(i, j) end end print("end for loop") ::exit:: print("exit") end main() 実行結果です。 1 1 1 2 exit 参考: lua-users…

re.findall()

忘れるのでメモ。 Python 3.2 (r32:88452, Feb 20 2011, 11:12:31) [GCC 4.2.1 (Apple Inc. build 5664)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> re.findall("ab+", "ababaabb") ['ab', 'ab'…

矩形をドラッグするサンプル。setFocusを使う。

矩形をドラッグするサンプル - noriok's diaryでは、矩形をドラッグするサンプルを作りました。ドラッグ中にマウスをいきおいよく動かし、マウスポインタが矩形の領域外に出てしまうと、イベントが矩形に伝達されず、矩形がその場で止まってしまう問題があり…

Luaのnilは型であり、その値はnilです。

Lua

Luaのnilは型であり、その値はnilです。 function main() print(nil) print(type(nil)) end main() 実行結果です。 nil nil

浮動小数点演算の誤差についての誤解

Lua

『Programming in Lua プログラミング言語Lua公式解説書』p.28ページより。 浮動小数点演算の誤差については広く誤解されており、浮動小数点数では単純に 1 を加算するだけでも悲惨な状況になると恐れている人もいます。実際のところは、倍精度浮動小数点数…

コルーチンの練習

Lua

コルーチンの練習です。 function main() co = coroutine.create(function() coroutine.yield(1) coroutine.yield(2) end) print(co) print(coroutine.status(co)) print(coroutine.resume(co)) print(coroutine.status(co)) print(coroutine.resume(co)) pr…

数値の表記が e を使ったものに切り替わるタイミング

Lua

2^i をプリントするプログラムを作成しました。 function main() for i = 1,50 do print(i, 2^i, type(2^i)) end end main() 実行結果です。 1 2 number 2 4 number 3 8 number 4 16 number 5 32 number 6 64 number 7 128 number 8 256 number 9 512 number…

矩形をドラッグするサンプル

矩形をドラッグするサンプルを作りました。 local _rect -- 矩形 function listener(event) event.target.x = event.x event.target.y = event.y return true end function main() local x = display.contentWidth/2 local y = display.contentHeight/2 loca…

CGAffineTransformConcatの疑問

ViewControllerのviewDidLoadメソッドでラベル(UILabel)をビューに追加し、そのラベルに対して、アフィン変換で移動と回転を適用しました。 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after l…

タッチ位置の周りを回る矩形

iOS

前回のタッチ位置に矩形を表示するサンプル(iOS)の続き。タッチ位置の周りを回る矩形を描画するサンプルです。時計回りに回転する矩形と、反時計回りに回る矩形の2つを表示しています。前回のプログラムのdrawRect:のみの修正です。 - (void)drawRect:(CGRec…

タッチ位置に矩形を表示するサンプル(iOS)

iOS

Coronaで作成したタッチ位置に矩形を表示するサンプルをiOSでも書いてみました。 // ViewController.h #import <UIKit/UIKit.h> #import "MyView.h" @interface ViewController : UIViewController { MyView* _myView; } @end // ViewController.m #import "ViewController.</uikit/uikit.h>…

UISliderを使ってRGBカラーを表示するプログラム

iOS

UISliderを3つ使って、RGBカラーを表示するプログラムを作りました。 // ViewController.h #import <UIKit/UIKit.h> #import "MyView.h" @interface ViewController : UIViewController { MyView* _myView; UISlider* _sliderR; UISlider* _sliderG; UISlider* _sliderB; } </uikit/uikit.h>…

タッチ位置に矩形を表示するサンプル

タッチ位置に矩形を表示するサンプルです。rotate()メソッドで矩形を常に回転させるようにしています。rotate()メソッドは正の値を指定すると時計回り、負の値を指定すると反時計回りに回転します。 local _rect -- 矩形 local _touchX -- タッチ座標X local…

相互再帰最適化

Pythonで相互再帰の末尾再帰最適化もできた Clojureで相互再帰最適化 Trampoline Trampolineというのがあるらしい。『プログラミングClojure』は読んだけどTrampolineの箇所はよく理解出来なかった記憶が。それにしても、Pythonだと拡張で末尾再帰最適化が可…

Luaは末尾再帰の最適化を行う

Lua

Luaは末尾再帰の最適化を行うらしい。プログラムを書いて確かめてみる。 function add(n) if n == 0 then return 0 else return 1 + add(n-1) end end function addTCO(n, acc) if n == 0 then return acc else return addTCO(n-1, acc+1) end end function …

Luaの長さ演算子

Lua

長さ演算子は単項演算子 # で表される。文字列の長さはそのバイト数である (つまり、各文字が1バイトだとした場合の、文字列の長さである)。テーブル t の長さは、 t[n] が nil でなく t[n+1] が nil であるような整数 n と定義されている。また、t[1] が ni…

カレンダーを表示するプログラムを作成してテストする

Lua

Luaでカレンダーを表示するプログラムを作成してみます。その後で作成したプログラムのテストについて考えます。まずは、calコマンドでカレンダー表示の確認。 $ cal 3 2012 3月 2012 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19…

Coronaでコンソールウィンドウを表示するには

Corona Terminalを実行すると、コンソールウィンドウが表示されます(同時にCoronaシミュレータも起動します)。

物体を落下させるサンプル

『基礎から学ぶ Corona SDK』を読みながら、Coronaで遊んでいます。Luaについても『入門Luaプログラミング』や『Programming in Lua』を読みながら勉強中です。Coronaには物理エンジン(Box2D)が組み込まれていて、物理シミュレーションを行うプログラムが手…

Coronaで遊ぶためにLuaを学ぶ

Lua

『入門Luaプログラミング』を読みながら、Lua勉強中です。CoronaでLuaを採用していて、きちんとLuaを勉強してみようと思いました。Luaはとてもシンプルな言語です。コルーチンが使えるのもいいですね。Emacsを使っている場合、C-c C-l(Send Buffer)でプログ…

プログラミング言語に対して、無頓着になりつつある

環境によって使用可能なプログラミング言語が制限され、自分の好きな言語が使えない。そのような日々が長く続くと、ある言語における力というものを忘れてしまうようになる。あの言語ではこの機能は使えない。だから、プログラムはこう書くしかない。そのよ…

モンティ・ホール問題

モンティ・ホール問題というのがある。 モンティ・ホール問題 「プレイヤーの前に3つのドアがあって、1つのドアの後ろには景品の新車が、2つのドアの後ろにはヤギ(はずれを意味する)がいる。プレイヤーは新車のドアを当てると新車がもらえる。プレイヤーが1…