Luaの標準ライブラリ関数とかSASライブラリ関数とか

Luaにおいては、関数はfunctionで定義するわけですが、
よっぽど基本的なものは、標準ライブラリとしてproc lua内で使用できます。

たとえばprint()とかipairs()とかtype()とか、今まで普通に説明してきましたが
これらは基本ライブラリの関数です。

標準ライブラリには、基本ライブラリの他にも色々あって
数学関数ライブラリのmathや、文字関数ライブラリのstring、
テーブル操作ライブラリのtableなどです。ライブラリっつうか、テーブルの中に格納された関数を使うイメージで、ライブラリ名.関数名で使います。

例えば以下のイメージ。

proc lua restart;
submit;

--mathのmax関数で最大値
x=math.max(2,5,3,1)
print("max関数:",x)

--stringのsub関数で部分文字列
y=string.sub("ABCDEF",2,3)
print("sub関数:",y)

--tableのsort関数でソートして、unpackでリスト展開
t={5,3,1,2}
table.sort(t)
print("sort関数:",table.unpack(t))

endsubmit;
quit;







どんなライブラリがあって、どういう関数があるかはググッてもらえばすぐに
でてくるのですが、注意があります。

proc luaでは対応していないライブラリや関数があるということです。

例えば外部ファイル操作のioライブラリやOS絡みのosライブラリなどは
対応していないようです。
ようですと言うのは、使ってみるとめっちゃエラー吐いたり
固まったりするので、どうやら無理っぽいという経験でしかないからです。
将来的には動いたりするのかも。
まあ、でもSASの中で動かしてるので、外部とのやりとり系がうまく動かないのは当然なのかもしれません。

でね、これまたproc lua特有なのですが、sasライブラリというのがあってですね。(言葉がややこしい!SAS用語とかぶるから!!)
sas.submit()とかもそうなんですが、

基本的に[sas.SAS関数名]でSAS関数を使うことができます。
つまり、以下のような感じ。

proc lua restart;
 submit;

 t={1,2,3}
 x=sas.catx("," ,table.unpack(t) )
 print(x);

 print(sas.max(3,4,2))

 y=sas.substr("ABCDEF",2,3)
print("substr関数:",y)

 print(sas.constant('pi'))

 endsubmit;
quit;







Luaの標準ライブラリとsasライブラリで、機能が重複しているものは多々あります。
string.subとsas.substrとか、minとかmaxとか。
どっち使ってもいいんですが、基本的に勝手知ったるSAS関数の方がみんなわかりやすいかも。


でも、これまた注意点ですが、全部はサポートされてないんですね。
このへん、ちゃんと独立したproc luaのリファレンス作ってくれないとつらいですね。




0 件のコメント:

コメントを投稿