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: expected=['Node', 'Leaf'] != actual=['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: expected=['e', 'children'] != actual=['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.2.1.tar.gz
(5.2 kB
view details)
File details
Details for the file miniadt-0.2.1.tar.gz.
File metadata
- Download URL: miniadt-0.2.1.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfaabf044d6d74bd8cd09a786bd40f7165a3d8449cb656551f585ed1306ef866
|
|
| MD5 |
2d1830532eda18b0f3a226b04d32fed7
|
|
| BLAKE2b-256 |
4bef76831e9f1392bb311e1af2ab38c0f6a4f596b7af13b4c89e0e04e73df36f
|