Egison 是世界上首个实现了非线性模式匹配的编程语言,用于处理各种不自由的数据类型。如列表、多集合、集合、树和图。 示例代码:
Egison 3.5.1 发布,此版本更新内容如下: 移除 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | (define $list (lambda [$a] (matcher {[,$val [] {[$tgt (match [val tgt] [(list a) (list a)] {[[<nil> <nil>] {[]}] [[<cons $x $xs> <cons ,x ,xs>] {[]}] [[_ _] {}]})]}] [<nil> [] {[{} {[]}] [_ {}]}] [<cons $ $> [a (list a)] {[{$x @$xs} {[x xs]}] [_ {}]}] [<snoc $ $> [a (list a)] {[{@$xs $x} {[x xs]}] [_ {}]}] [< join $ $> [(list a) (list a)] {[$tgt (match-all tgt (list a) [(loop $i [1 $n] <cons $xa_i ...> $rs) [(foldr (lambda [$i $r] {xa_i @r}) {} (between 1 n)) rs]])]}] [<nioj $ $> [(list a) (list a)] {[$tgt (match-all tgt (list a) [(loop $i [1 $n] <snoc $xa_i ...> $rs) [(foldr (lambda [$i $r] {xa_i @r}) {} (between 1 n)) rs]])]}] [$ [something] {[$tgt {tgt}]}] }))) |
1 2 3 4 5 | (define $xa [| 1 2 3 4 5 |]) (array-size xa);=>5 xa_1;=>1 xa_5;=>5 xa_8;=>undefined |