フィルタ処理のサンプル解説。

公式のマニュアルに面白そうな記述があったのでメモ。
個人的にはC言語で関数ポインタ使ってると手続きが面倒なので、
Miniscriptで同じような処理が簡単に利用できるのはありがたい。

参考資料
MiniScript-Manual.pages

29ページのフィルタのコード
(コメント除いてそのまま引用してます)

filter = function( seq, f)//1.
  result = []
  for i in seq
    if f(i) then result=result + [i]
  end for
  return result
end function

isEven = function(x)//2.
  return x%2 == 0
end function

list=[2,3,5,6,8,9]
print filter( list, @isEven)//3.

Filter関数の引数は(リスト、関数ポインタ)になる。(1.部分)
これは、Filter関数内で「関数を実行する」ことができる。

すなわち、いざとなったら関数ポインタをぶん投げる事で
分岐処理ができることにほかならない。

内容としては、偶数チェックをseq分実施し、
seqの数値の中で、偶数チェックでTrueを返した数に対して(2.部分)、リストに追加する形を取っている。

最終的に、Filter関数がlist型を返している。

functionの定義について、あらかじめ型を定義しないで宣言を行っていることに注意。
コードを書くことにおいてすごい便利な機能になっているけど、
逆に言うと「別の型を格納できる」という事なので、デバッグ時に苦労する可能性もある。
(functionの文法に準拠してるのでエラーを返すとは思うけど)

利用する引数に対しプリフィックスとかつければ理解が進むかと思う。