Programming Language Egison
プログラミング言語Egisonは、強力なパターンマッチ機能を持つという。とりあえず、同じような機能をLua上で使えるように、MoonScriptを使って実装してみた。
mandel59/egimoon · GitHub
print show match_all {1, 2, 3}, (List Number), [cons var('x'), var('ts')]: => {@x, @ts} print show match_all (mkmultiset {1, 2, 3}), (Multiset Number), [cons var('x'), var('ts')]: => {@x, (unmultiset @ts)} print show match_all {1, 2, 3}, (List Number), [join var('xs'), var('ys')]: => {@xs, @ys} print show match_all {1, 2, 3, 1, 2}, (List Number), [cons var('n'), cons val(=> @n), var!]: => @n print show match_all (mkmultiset {1, 2, 3, 1, 2}), (Multiset Number), [cons var('n'), cons val(=> @n), var!]: => @n
出力はこんな感じ。
egimoon$ moon example.moon {{1,{2,3}}} {{1,{2,3}},{2,{1,3}},{3,{1,2}}} {{{},{1,2,3}},{{1},{2,3}},{{1,2},{3}},{{1,2,3},{}}} {1} {1,2}
手抜きだし、足りない機能はあるが、案外簡単に実装できた。徹夜になったけど。