how to use
## create Type
>>> from miniadt import ADTTypeProvider, dispatchmethod
>>> TreeType = ADTTypeProvider("Tree")
>>> Node = TreeType("Node", "e children")
>>> Leaf = TreeType("Leaf", "e")
## printing value
>>> Leaf(e=10)
Leaf(e=10)
>>> Node(e=10, children=[Leaf(e=20)])
Node(e=10, children=[Leaf(e=20)])
## use pattern match
>>> @TreeType.match
... class depth(object):
... @dispatchmethod
... def Node(e, children):
... return max(depth(e)for e in children) + 1
...
... @dispatchmethod
... def Leaf(e):
... return 1
>>> depth(Leaf(e=10))
1
>>> depth(Node(e=10, children=[Leaf(e=20), Node(e=30, children=[Leaf(e=40)])]))
3
miniadt has comprehensive check function.
## not comprehensive definition on pattern matching function error is occur
### 1. lack of dispatch candidates
>>> class invalid_dispatch(object):
... @dispatchmethod
... def Node(e, children):
... return "foo"
>>> TreeType.match(invalid_dispatch)
Traceback (most recent call last):
...
miniadt.NotComprehensive: ['Node'] != ['Leaf', 'Node']
### 2. dispatch function's arguments are invalid.
>>> class invalid_dispatch2(object):
... @dispatchmethod
... def Node(e): ## correct argsspec is "e, children"
... return "foo"
... @dispatchmethod
... def Leaf(e):
... return "foo"
>>> TreeType.match(invalid_dispatch2)
Traceback (most recent call last):
...
miniadt.NotComprehensive: on Tree.Node: ['e', 'children'] != ['e']
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
miniadt-0.1.tar.gz
(4.4 kB
view details)
File details
Details for the file miniadt-0.1.tar.gz.
File metadata
- Download URL: miniadt-0.1.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38867d48708c0f0dbc37590f2f9b980b44992b63d2f4f7ebbaa49c06618e8295
|
|
| MD5 |
7730e172288b8fc87e0666c378075602
|
|
| BLAKE2b-256 |
183db0c347061c15e39c0642dfc38b3b2e37f62433a3bebb538ed159f015c1b7
|