Sexp Pattern Matcher License: AGPL3 Copyright Pascal J. Bourguignon 2003 - 2012 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>
(collect-variables pat) |
function |
PAT: A symbolic expression with the following syntax: (?v v) expects a symbol (variable). (?c c) expects a constant (non symbol atom). (?x x) expects anything (one item). (?+ l) expects anything (one or more items). (?* l) expects anything (zero or more items). other expects exactly other (can be a sublist). RETURN: A list of the symbol used in the various (?. sym) items, in no particular order, but with duplicates deleted.
(match pat exp &optional ms) |
function |
DO: A pattern matcher accepting the following syntax: ?av expects a symbol (variable). ?ac expects a constant (non symbol atom). ?ax expects anything (one item). (?v n) expects a symbol (variable) and bind it. (?c n) expects a constant (non symbol atom) and bind it. (?x n) expects anything (one item) and bind it. (?n n ...) expects anything (several item) and bind them. (?+ ...) expects anything (one or more times). AOB (?* ...) expects anything (zero or more times). AOB (?? ...) expects anything (zero or one time). ... expects exactly ... (can be a sublist). AOB = All occurences bind. RETURN: A match-state structure. SEE ALSO: match-state-failed-p to check if the matching failed. match-state-dict to get the binding dictionary.
(match-case sexp &rest clauses) |
macro |
SEXP: A symbolic expression, evaluated. CLAUSES: A list of (pattern &body body) The pattern must be litteral. Lexical variable names are extracted from it, and body is executed in a lexical environment where these names are bound to the matched subexpression of SEXP. DO: Execute the body of the clause whose pattern matches the SEXP, or whose pattern is a symbol string-equal to OTHERWISE. EXAMPLE: (match-case expr ((add (?x a) to (?x b)) `(+ ,a ,b)) ((multiply (?x a) with (?x b)) `(* ,a ,b)) ((substract (?x a) from (?x a)) 0) (otherwise :error))
(match-case* sexp clauses) |
function |
SEXP: A symbolic expression, evaluated. CLAUSES: A list of (pattern func) or (otherwise ofunc) The functions FUNC is called with one BINDINGS argument. The function OFUNC is called with no argument. DO: Call the function of the clause whose pattern matches the SEXP, or whose pattern is a symbol string-equal to OTHERWISE. RETURN: The result of the called function, and the pattern that matched. EXAMPLE: (match-case* expr `(((add (?x a) to (?x b)) ,(lambda (bindings) `(+ ,(aget bindings 'a) ,(aget bindings 'b))) ((multiply (?x a) with (?x b)) ,(lambda (bindings) `(* ,(aget bindings 'a) ,(aget bindings 'b)))) ((substract (?x a) from (?x a)) ,(constantly 0)) (otherwise ,(lambda () (error "No matching pattern"))))))
(match-dict-map ms function) |
function |
DO: Calls FUNCTION (lambda (symbol value) ...) with all successive bindings, (unless matching state is failed). RETURN: The list of results of the FUNCTION.
(match-state-dict ms) |
function |
RETURN: The dictionary of MATCH-STATE.
(match-state-failed-p ms) |
function |
RETURN: Whether the match failed.