module splitend_node

Class SENode

Used to make inwardly directed bush-like graphs.

  • designed so multiple splitends can safely share the same data

  • nodes always contain data

  • data node SENode[D] make up end-to-root singularly linked lists

  • two nodes compare as equal if
    • both their previous Nodes are the same

    • their data compare as equal

  • a root node is a node whose previous node is itself
    • root nodes mark the bottom of splitend stacks

  • more than one node can point to the same proceeding node
    • forming bush like graphs

class pythonic_fp.splitends.splitend_node.SENode(data: D, prev: ~typing.Self | _Sentinel = Sentinel(''_split_end_node_private_str''))
Parameters:
  • data – Nodes always contain data of type D.

  • prev – Link to previous node. Points to self if a root node.

both() tuple[D, Self]

Peak at data and previous node, if a root then data and self.

Returns:

tuple of type tuple[D, SENode[D]]

data() D

Peak at data.

Returns:

The data stored in the SENode.

fold(f: Callable[[D, D], D]) D
fold(f: Callable[[T, D], T], init: T) T

Fold data across linked nodes with a function..

Parameters:
  • f – Folding function, first argument is for accumulated value.`

  • init – Optional initial starting value for the fold.

Returns:

Reduced value folded from end to root in natural LIFO order.

prev() Self

Peak at previous node.

Returns:

The previous node stored in the SENode.

push(data: D) Self

Create a new SENode[D].

Parameters:

data – Data for new node to contain.

Returns:

New SENode whose previous node is the current node.