Lua
○
- 高速
- JSは爪の垢を煎じて飲むべき。
function fib(n) return n < 2 and n or fib(n-1) + fib(n-2) end n, t = io.read'*n', os.clock() print('fib('.. n ..') = '.. fib(n) ..'\n'.. os.clock() - t ..' sec.')
function fib(n) n < 2 ? n : fib(n-1) + fib(n-2); n = readline(), t = new Date; print('fib('+ n +') =', fib(n), '\n'+ (new Date - t)/1e3, 'sec.');
$ echo 30| lua fib.lua fib(30) = 832040 0.609 sec. $ echo 30| js fib.js fib(30) = 832040 3.837 sec.
- 名前
- カワイイ。
△
- 環境
- 対話モードでいちいち print() 書かされるのヒドイと思っていたが,実は「 = 」で出力できることが判明*1。
- でもtableの中身が見れないと不便なので一工夫必要。
-- i.lua -- _PROMPT = 'Lua> ' _PROMPT2 = '---> ' say = print escapees = {['\a']='a', ['\b']='b', ['\f']='f', ['\n']='n', ['\r']='r', ['\t']='t', ['\v']='v', ['\\']='\\', ["'"]="'"} function puts(...) for _,v in pairs{...} do say(v) end end function peek(tbl) for k,v in pairs(tbl) do say(k, '\n', v) end end function uneval(v) -- ToDo: circular reference detection local t = type(v) if 'table' == t then t = {} for k,x in pairs(v) do t[#t+1] = (type(k) == 'number' and '' or tostring(k)..' = ')..uneval(x) end return '{ '..table.concat(t, ', ')..' }' elseif 'string' == t then return "'"..v:gsub("['%c]", function(c) return '\\'..(escapees[c] or c:byte()) end).."'" else return tostring(v) end end function print(...) for _,v in pairs{...} do say(uneval(v)) end end
$ lua -li Lua 5.1.3 Copyright (C) 1994-2008 Lua.org, PUC-Rio Lua> ={42, [3]=1e3, 'hoge', fuga = 'piyo'} { 42, 'hoge', 1000, fuga = 'piyo' } Lua> peek(table) setn function: 00928918 insert function: 00928898 getn function: 00928818 foreachi function: 009287F8 maxn function: 00928858 foreach function: 00927990 concat function: 00927950 sort function: 00928958 remove function: 009288D8
- 構文
- 明らかにゴルフに向いてない。メソッド名はそこそこ短いのだが…。
*1:マニュアルに書いておいて欲しいものである。