Trivia
Pattern Matcher Compatible with Optima
Install / Use
/learn @guicho271828/TriviaREADME
[[https://travis-ci.org/guicho271828/trivia][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.
- news!(09/06/2018) SPLIT symbol was exported from the =trivia.ppcre= package.
- news!(02/19/2019) Added =MEMBER= pattern. When the argument is a constant, it also adds type declaration.
- news!(04/24/2019) Improved the compilation of =GUARD= pattern. It no longer uses the internal hackery.
- news!(04/24/2019) Balland2006 optimizer is now the default optimizer for the pattern compiler!
- news!(04/28/2019) Added a =progv= pattern, which can dynamically alter the dynamic variable the value will be bound to.
- news!(05/08/2019) Now the optimizer can be specified in the lexical environment via =(declare (trivia:optimizer <name>))= (e.g. =(declare (trivia:optimizer :trivial))=). Implemented through cltl2 API.
- news!(10/11/2019) The OR1 consistency checking algorithm in Level 1 no longer takes the exponential runtime. Compilation of [[https://github.com/guicho271828/type-r][type-r]] library is now 10x faster! (patch from @pfdietz)
- news!(01/01/2021) Added =HASH-TABLE-ENTRY=, =HASH-TABLE-ENTRIES= patterns, and corresponding =!= suffixed patterns for matching only if key is present in hash table.
- news!(05/30/2021 Added support for [[https://github.com/slburson/fset][FSet]]. See [[test/fset.lisp][tests]] for how-to.
- 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 [[https://github.com/guicho271828/trivia/wiki][our wiki]]. Known differences between Optima and Trivia, which are bug, are [[https://github.com/guicho271828/trivia/wiki/Known-Differences][described here]] (7/31/2016)
#+BEGIN_SRC diff (defpackage :playwithit (:use :cl
-
:optima))
-
:trivia))
(in-package :playwithit)
(match '(something #(0 1 2)) ((list a (vector 0 _ b)) (values a b))) ;; --> SOMETHING, 2 #+END_SRC
Patterns compiled with Trivia runs [[https://github.com/guicho271828/trivia/wiki/Benchmarking-Results][faster than Optima]].
| runtime [sec] | [[https://github.com/guicho271828/trivia/blob/master/bench/definitions.lisp#L11][fibonacci]] | [[https://github.com/guicho271828/trivia/blob/master/bench/definitions.lisp#L40][gomoku]] | [[https://github.com/guicho271828/trivia/blob/master/bench/definitions.lisp#L214][string-match]] | |---------------+-----------+--------+--------------| | optima | 11.5 | 39.8 | 82.5 | | trivia [1] | 9.68 | 37.4 | 1.57 |
[1]: trivia is using :balland2006 optimiizer
... and Trivia is more extensible. In fact, Trivia's =defpattern= is able to implement all of [[https://github.com/m2ym/optima#constructor-pattern][unmodifiable, core pattern language]] in Optima within itself.
#+BEGIN_SRC lisp (defpattern cons (a b) (with-gensyms (it) `(guard1 (,it :type cons) (consp ,it) (car ,it) ,a (cdr ,it) ,b))) #+END_SRC
Detailed documentation is in [[https://github.com/guicho271828/trivia/wiki][github wiki]].
- Dependency & Testing
- Level 0,1 : Alexandria only.
- Level 2 : Additionally, lisp-namespace and closer-mop.
To run the tests, =(asdf:test-system :trivia)= .
To run the benchmark, =(asdf:test-system :trivia.benchmark)=
Related Skills
node-connect
339.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.9kCommit, push, and open a PR
