A pattern matching library.

## Project description

A pattern matching libary for python.

Work in progress

## Overview

This package implements pattern matching in python. It is similar to the implementation in Mathematica or Haskell.

### Expressions

Expressions and patterns both have a tree structure. Expressions consist of symbols (leafs) and operations (internal nodes):

```>>> from matchpy.expressions import Operation, Symbol, Arity
>>> f = Operation.new('f', Arity.binary)
>>> a = Symbol('a')
>>> print(f(a, a))
f(a, a)
```

Patterns are expressions which can additionally contain variables and wildcards. Variables can give a name to a node of the pattern so that it can be accessed later. Wildcards are placeholders that stand for any expression. Usually, the two are used in combination:

```>>> from matchpy.expressions import Variable
>>> x = Variable.dot('x')
>>> print(f(a, x))
f(a, x_)
```

However, unnamed wildcards can also be used:

```>>> from matchpy.expressions import Wildcard
>>> w = Wildcard.dot()
>>> print(f(w, w))
f(_, _)
```

Or a more complex expression can be named with a variable:

```>>> print(Variable('y', f(w, a)))
y: f(_, a)
```

In addition, it supports sequence wildcards that stand for multiple expressions:

```>>> z = Variable.plus('z')
>>> print(f(z))
f(z__)
```

### Substitutions

Matches are given in the form of substitutions, which are a mapping from variable names to expressions:

```>>> from matchpy.matching.one_to_one import match
>>> y = Variable.dot('y')
>>> b = Symbol('b')
>>> expression = f(a, b)
>>> pattern = f(x, y)
>>> substitution = next(match(expression, pattern))
>>> substitution
{'x': FrozenSymbol('a'), 'y': FrozenSymbol('b')}
```

Replacing the variables in the pattern according to the substitution will yield the original subject expression:

```>>> from matchpy.functions import substitute
>>> original, _ = substitute(pattern, substitution)
>>> print(original)
f(a, b)
```

## Project details 0.5.1 0.5.0 0.4.6 0.4.4 0.4.3 0.4.2 0.4.1 0.4 0.3.2 0.3.1 0.3 0.2

This version 0.1.2 0.1.1