Skip to content

A Python package to simplify the creation and manipulation of recursive data structures.

License

Notifications You must be signed in to change notification settings

sdeslauriers/recur

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

recur

A Python package to simplify the creation and manipulation of recursive data structures.

Quickstart

Install the package by running:

pip install recursive-abc

Verify the installation by importing the package in ipython:

import recur

If this succeeds, you have successfully installed the recur package. You can now use it to define you own recursive data structures. Here is an example that defines a new class named MyRecursiveClass which illustrates the basic features of the package.

from recur.abc import Recursive

class MyRecursiveClass(Recursive):

    def __init__(self, name):
        super().__init__()
        self.name = name
        self._children = []

    def __recur__(self):
        return self._children

    def __repr__(self):
        return self.name

    def add_child(self, child):
        self._children.append(child)

The __recur__ method is the centerpiece of this example. It is a method which must be implemented by concrete subclasses of Recursive. It must return an iterable of objects of the same class as the one implementing it. We can now create instances of MyRecursiveClass and link them together.

root = MyRecursiveClass('root')
left = MyRecursiveClass('left')
center = MyRecursiveClass('center')
right = MyRecursiveClass('right')

root.add_child(left)
root.add_child(center)
root.add_child(right)
center.add_child(root)  # Cycles are fine.

The key feature of recur is how it facilitates iteration over recursive structures. To iterate over the structure defined above, we can simply write:

for node in root:
    print(node.name)

Note that we iterated in preorder. To iterate in postorder, we can simply use reversed.

for node in reversed(root):
    print(node.name)

About

A Python package to simplify the creation and manipulation of recursive data structures.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages