こんにちは、今回はStackのモジュールハンドラstkpackについて紹介します。
stkpackは、Stackスクリプトの依存関係を1つのファイルに纏め、余分なスペースを削除してファイルを軽くするための便利なツールです。
stkpackの特徴
- Stackスクリプトの依存関係を1つの
.pack.stk
ファイルにパック - 不要なスペースを削除し、スクリプトファイルを軽くする
- 簡潔なコマンドラインインターフェース
使い方
以下はこれからパックするStackのスクリプトファイルです。
これは素数判定をするアプリなのですが数学ライブラリmath.stk
に依存しています。
このままだと配布する際にユーザがmath.stk
も一緒にインストールして貰わなければいけません。
prime.stk
(../library/math.stk) read-file eval
cls (Prime number judgement apps) println
(> ) input (target) var
(
cls (Prime number judgement apps) println
(
(exiting...) println
0 exit
) (
(
now-time (start) var (
target ( is a prime number \(time: ) concat time concat ( second\))
concat println target set-clipboard
) (
target ( is not a prime number \(time: ) concat time concat ( second\))
concat println
)
target prime? eval now-time start sub (time) var if
) (
(Please enter the number.) println
)
target ([0-9]) regex () join (target) var target if
)
target (exit) regex if
(> ) input (target) var
)
(true) while
こんな状況こそstkpackの出番です!
ターミナルのstackの所をstack-langの処理系のパスに置き換えて実行してください。既にパスが通ってるならそのままでOKです。
起動するとウェルカムメッセージの後に入力プロンプトが出るので、パックしたいStackスクリプトファイルのパスを入力します。
$ stack ./stkpack.stk
Welcome to stkpack !!!
Please enter Stack script file you want to pack
> prime.stk
Deleted verbose spaces.
Loading ../library/math.stk
The packing is done.
Deleted verbose spaces.
All of the packing is completed!
Created pack file at ./prime.pack.stk
すると、以下のファイルが作成されます。
prime.pack.stk
# This file was created by stkpack # # Stack programming language mathematics standards library # # Pi # 3.141592653589793 (pi) var ( # Solve abs # (num) var num (-) () replace (number) cast ) (abs) var ( # Solve sum of list # (array) var array (i) ( i total add (total) var ) for total ) (sum) var ( # Solve radian form angle # pi mul 180 div ) (radian) var ( # Solve average of list # (array2) var array2 sum eval array2 len div ) (average) var ( # Solve cumulate value from the range # (max) var (count) var (count copy 1 add max cumulate eval add) (count) count max less if ) (cumulate) var ( # Solve max value in list # (array) var array 0 get (temp) var array (i) ( (i (temp) var) () temp i less if ) for temp ) (max) var ( # Solve max value in list # (array) var array 0 get (temp) var array (i) ( (i (temp) var) () i temp less if ) for temp ) (min) var ( # Judgement is it prime number # (number) var 2 (i) var true (flag) var ( (false) (true) number 2 less if (flag) var ) ( (false (flag) var) ( ( ( false (flag) var ) () number i mod 0 equal if i 1 add (i) var ) (i number 0.5 pow 1 add less flag and) while ) number 2 mod 0 equal number 3 mod 0 equal or if ) number 4 less if flag ) (prime?) var ( # Split the number # (num) var 1 num 1 range rand (r) var [r num r sub] ) (split-number) var cls (Prime number judgement apps) println (> ) input (target) var ( cls (Prime number judgement apps) println ( (exiting...) println 0 exit ) ( ( now-time (start) var ( target ( is a prime number \(time: ) concat time concat ( second\)) concat println target set-clipboard ) ( target ( is not a prime number \(time: ) concat time concat ( second\)) concat println ) target prime? eval now-time start sub (time) var if ) ( (Please enter the number.) println ) target ([0-9]) regex () join (target) var target if ) target (exit) regex if (> ) input (target) var ) (true) while
これでStackスクリプトの依存関係が1つのファイルに纏められ、さらに余分なスペースが削除された事によってファイルも軽くなりました。
これで素数判定アプリを皆に使ってもらえます(Stack自体のインストールは必要ですが)。
ソースコード
stkpackのソースコードは以下のGithubリポジトリにあります。
ぜひご覧ください!