Egison 是世界上首个实现了非线性模式匹配的编程语言,用于处理各种不自由的数据类型。如列表、多集合、集合、树和图。 示例代码: ;; Extract all twin primes from the infinite list of prime numbers with pattern-matching! (define $twin-primes (match-all primes (list integer) [<join _ <cons $p <cons ,(+ p 2) _>>> [p (+ p 2)]])) ;; Enumerate first 10 twin primes (take 10 twin-primes) ;=>{[3 5] [5 7] [11 13] [17 19] [29 31] [41 43] [59 61] [71 73] [101 103] [107 109]} Egison 3.5.1 发布,此版本更新内容如下: 移除 loop 表达式到模式外 (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 开始 (define $xa [| 1 2 3 4 5 |]) (array-size xa);=>5 xa_1;=>1 xa_5;=>5 xa_8;=>undefined Egison 3.5.1 发布,模式匹配编程语言下载地址