luaはバイトコードをコンパイルする方式であるため,高い処理速度であることが知られている.
そこでSASのproc luaはどのぐらいの処理速度なのか再帰処理の関数を作成し検証した.
比較対象としてproc fcmpを用いて評価した.
検証結果,proc fcmpがproc luaに比べて約2~3倍速い.(PC環境により異なる.)
proc lua内で再帰処理をする場合はproc fcmpを組み合わせて実装すること.
proc lua;
submit;
function tak(x, y, z)
if x <= y then
return z
else
return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y))
end
end
var=tak(18, 9, 0)
print(var)
endsubmit;
run;
proc fcmp outlib=WORK.FUNCDT.CARCALC ;
function takf(x, y, z);
if x <= y then
return(z);
else
return (takf(takf(x - 1, y, z), takf(y - 1, z, x), takf(z - 1, x, y)));
endsub;
run;
quit;
options cmplib=WORK.FUNCDT;
data _null_;
rc = takf(18, 9, 0);
put rc=;
run;