Pattern Matcher Compatible with Optima
Clone or download
Permalink
Failed to load latest commit information.
bench stylistic changes in benchmark Mar 27, 2015
cffi resolve null-pointer symbol conflict Apr 8, 2017
level0 assert on level0 May 21, 2016
level1 guard1 pattern now accepts :special and :dynamic-extent declaration Jan 21, 2017
level2 export property! May 25, 2018
ppcre Export SPLIT symbol from trivia.ppcre [tested] #92 Sep 15, 2018
quasiquote implemented Apr 1, 2016
test testing May 25, 2018
.gitignore cleanup Mar 1, 2015
.travis.yml allow failures in clisp Jan 4, 2017
LICENSE Add license file Jul 20, 2016
README.org [ci skip] update news Jun 28, 2018
circle.yml remove clisp from circleCI Jan 18, 2017
testscr.ros test nothing Apr 8, 2017
trivia.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.benchmark.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.cffi.asd dependency Apr 8, 2017
trivia.cffi.test.asd working; don't know how to test it Apr 8, 2017
trivia.level0.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.level0.test.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.level1.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.level1.test.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.level2.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.level2.docparser.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.level2.test.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.ppcre.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.ppcre.test.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.quasiquote.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017
trivia.quasiquote.test.asd Make ASDF 3.3 happier with .asd files Apr 2, 2017

README.org

https://travis-ci.org/guicho271828/trivia.svg?branch=master

  • news! new pattern: lambda-list pattern. Contributed by akssri
  • news! new pattern: number-related patterns, e.g. >, <, =, <= …
  • news! Inline pattern implemented ! : @, @@ …
  • news!(04/02/2016) Support for fare-quasiquote is now available. See test/quasiquote for the usage
  • news!(04/22/2016) Added metabang-bind like macros if-match, when-match, unless-match, let-match, let*-match, let-match1
  • news!(05/21/2016) Added support for minor implementations: CMU, ECL, CLISP, ABCL.
  • news!(05/22/2016) Implemented ARRAY, SIMPLE-ARRAY, ARRAY-ROW-MAJOR, ARRAY-ROW-MAJOR* patterns! Multi-dimentional arrays are now more handy!
  • news!(07/21/2016) Added READ, LAST, SPLIT, SPLIT* patterns! Parsing the string is more conveninent.
  • news!(01/21/2017) Added DYNAMIC pattern! Careful use of this pattern can impact the performance sensitive code.
  • news!(04/08/2017) Added a new contrib package TRIVIA.CFFI which provides -> pattern ! Offers convenient access to foreign objects.
  • news!(05/26/2018) Added property!, which only matches when the key is present in a plist.

Trivia : Trivial Pattern Matching Compiler

Trivia is a pattern matching compiler that is compatible with Optima. It shares the same testing code with Optima and acts as a drop-in replacement for 99% usage. For the basic usage, consult our wiki. Known differences between Optima and Trivia, which are bug, are described here (7/31/2016)

(defpackage :playwithit
  (:use :cl 
-       :optima))
+       :trivia))
(in-package :playwithit)

(match '(something #(0 1 2))
  ((list a (vector 0 _ b))
   (values a b)))
;; --> SOMETHING, 2

Patterns compiled with Trivia runs faster than Optima.

runtime [sec]fibonaccigomokustring-match
optima11.539.882.5
trivia [1]9.6837.41.57

[1]: trivia is using :balland2006 optimiizer

… and Trivia is more extensible. In fact, Trivia’s defpattern is able to implement all of unmodifiable, core pattern language in Optima within itself.

(defpattern cons (a b)
  (with-gensyms (it)
    `(guard1 (,it :type cons) (consp ,it) (car ,it) ,a (cdr ,it) ,b)))

Detailed documentation is in github wiki.

Dependency & Testing

  • Level 0,1 : Alexandria only.
  • Level 2 : Additionally, lisp-namespace and closer-mop.

To run the tests with trivial optimizer, (asdf:test-system :trivia) .

In order to run the same test with :balland2006 optimizer activated, run follows:

;; $ git clone https://github.com/guicho271828/trivia.balland2006
;; $ git clone https://github.com/guicho271828/type-i

(asdf:test-system :trivia.balland2006.enabled)

To run the benchmark:

(asdf:test-system :trivia.benchmark)