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}手抜きだし、足りない機能はあるが、案外簡単に実装できた。徹夜になったけど。